我注意到一个关于
由于任何图像在获取其图像数据之前都需要绘制到
下面是我加载图像的方法;
通常版本:
这段代码从同一画布中获取所需矩形的图像数据,并将该图像数据放在我想要绘制的画布上。我认为透明度应该得到保留,但事实并非如此。这是个例子(因为存在
使用
getImageData
的奇怪问题:当获取图像数据时,图像的透明度似乎被忽略了。由于任何图像在获取其图像数据之前都需要绘制到
canvas
上,所以我认为这是涉及的canvas
不透明的问题。但是我错了,因为在drawImage
中使用canvas
参数会保持透明度。下面是我加载图像的方法;
var load_image = function(name, url, holder, callback) {
var img = new Image();
img.src = url;
img.addEventListener('load', function(e) {
var canvas = make_canvas(e.target.width, e.target.height);
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(e.target, 0, 0);
holder[name] = {canvas: canvas, ctx: ctx};
delete e.target;
callback.call();
}, false);
};
回调函数
就是简单的绘图函数,它调用draw_image
来绘制图像。通常版本:
var draw_image = function(ctx, img, sx, sy, w, h, dx, dy) {
ctx.drawImage(img.canvas, sx, sy, w, h, dx, dy, w, h);
};
它只是将画布作为drawImage
的参数,并且结果如预期一样保持透明度。 示例。
图像数据版本;
var draw_image = function(ctx, img, sx, sy, w, h, dx, dy) {
var imagedata = img.ctx.getImageData(sx, sy, w, h);
ctx.putImageData(imagedata, dx, dy);
};
这段代码从同一画布中获取所需矩形的图像数据,并将该图像数据放在我想要绘制的画布上。我认为透明度应该得到保留,但事实并非如此。这是个例子(因为存在
origin-clean
标志,所以这是Dropbox链接):Example。使用
getImageData
时,我的假设是保持透明度,但是我是否使用方法不当?无论如何,真的需要帮助。
canvas
作为游戏中的“图像”(颜色掩蔽和透视变换)是否比开销更大。如果我需要引入一个中间画布来绘制转换后的图像,那么我还不如使用Image
对象和粗略的canvas
进行处理。再次感谢! - Rikonator