2010-08-26 175 views
1

好的,我有两个版本的代码。第一个似乎工作(主要),第二个给我的主题名称未捕获的错误。javascript-canvas未捕获错误:INDEX_SIZE_ERR:DOM异常1

defs: 

var VID_WID = 640; 
var VID_HIGH = 360; 
var OUT_WID = 480; 
var OUT_HIGH = 320; 
var NUM_WID = 3; 
var NUM_HIGH = 3; 


var TILE_WIDTH = VID_WID/NUM_WID; 
var TILE_HEIGHT = VID_HIGH/NUM_HIGH; 
var OUT_WIDTH = OUT_WID/NUM_WID; 
var OUT_HEIGHT = OUT_HIGH/NUM_HIGH; 

Working: 
    tile.sx = x*TILE_WIDTH; 
    tile.sy = y*TILE_HEIGHT; 
    tile.dx = x*OUT_WIDTH; 
    tile.dy = y*OUT_HEIGHT; 
... 
    draw.drawImage(copycanvas, tile.sx, tile.sy, 
     TILE_WIDTH, TILE_HEIGHT, 
     tile.dx, tile.dy, 
     OUT_WIDTH, OUT_HEIGHT); 

Gets Exception: 
    tile.sx = x; 
    tile.sy = y; 
    tile.dx = x; 
    tile.dy = y; 
... 
    draw.drawImage(copycanvas, tile.sx*TILE_WIDTH, tile.sy*TILE_HEIGHT, 
     TILE_WIDTH, TILE_HEIGHT, 
     tile.dx*OUT_WIDTH, tile.dy*OUT_HEIGHT, 
     OUT_WIDTH, OUT_HEIGHT); 

我看到的唯一区别是我在做乘以WIDTH和HEIGHT参数。然而,一个人能够工作,另一个人能够提供例外。

我想使用后面的代码,所以我可以直接对x,而不是sx/TILE_WIDTH == dx/OUT_WIDTH来编译.sx和.dx的x和y值。我想我总是可以添加另外几个字段来复制努力,但似乎我不应该那样做。

任何想法,为什么一个工程,其他不?

+0

任何机会都可以提供一个摄制链接? – 2010-08-26 00:35:19

回答

0

好的,好的。也许飞行员错误,或者至少是驾驶舱问题。

练习的要点是操纵图像,并处理进入图像需要缩放到特定输出大小的情况。它看起来像一个咒语(或实例化,如果你更喜欢更好的英语),源画布的大小设置为(480x320),与目标画布匹配,而不是(640x360),这是输入视频的正确大小以及VID_WIDTH,VID_HEIGHT标注的大小。

答案是验证画布大小是否匹配您正在绘制的区域。 如果不匹配,您可能会收到index_size_error异常。

在一个块中写入较大的视频是可以的,但是当您使用剪贴蒙版/区域时,最好在范围内。 (有人可以验证这一点?)

3

首先请看下面的图片。

我也得到了相同的错误代码。 在我的情况下,“源图像”的大小是640 x 480. 我分配了sx,sy参数为10,10和sWidth,sHeight参数为640,480。 然后我得到了相同的错误代码。

由于sx,sy参数偏移捕获窗口10,10像素,sWidth,sHeight窗口超出范围。

在我的想法中,我造成了INDEX_SIZE_ERROR,因为没有要引用的数据。 ,我把超大的宽度放到了高度。

alt text

的drawImage(图像,SX,SY,sWidth,sHeight,DX,DY,用于控制做切片)

相关问题