getImageData
;で奇妙な問題に気づきました。画像データを取得する際、画像の透明度は無視されているようです。
canvas
画像データを取得する前に画像を描画する必要があるため、これは問題のcanvas
不透明な問題であると推測しました。しかしcanvas
、の引数としてを使用するとdrawImage
透明性が維持されるため、私は間違っていました。
これが私が画像をロードした方法です。
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);
};
これcallback
は単に描画関数であり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リンクです。)
透明性を維持する必要があると仮定するのは間違っていgetImageData
ますか?それとも私はそれを間違った方法で使用していますか?
いずれにせよ、助けていただければ幸いです。