イメージをキャンバスにレンダリングしています。 drawImage MDN APIを読んだ後、それは同じ結果を生成する必要があり、次の2行のコードのようになります。キャンバスのdrawImageのスケールが一貫していないのはなぜですか?
var ctx = canvas.getContext('2d');
ctx.drawImage(this.image, 0, 0, this.image.width, this.image.height, 0, 0, this.clip.width, this.clip.height);
ctx.drawImage(this.image, 0, 0, this.clip.width, this.clip.height);
しかし、彼らはしないでください!なぜ私は理解できません。最初の画像は、私が期待している画像であるthis.clip
で埋め尽くされています。しかし、第2のものは、this.clip
であるものに拡大するようには見えず、画像はそれ自身の範囲外に出ているようです。
これは私がjavascriptで生成した画像ですので、これが起こるような画像の作成に失敗した可能性はありますか?
これは私が画像を作るために使うコードです。
this.image = new Image(this.getSize()[0],this.getSize()[1]);
//this.getSize() = [32, 42, 40];
var c = document.createElement('canvas');
var ctx = c.getContext('2d');
var pixels = ctx.createImageData(this.image.width, this.image.height);
for (var x = 0; x < this.image.width; x++) {
for (var y = 0; y < this.image.height; y++) {
var i = (x + y*this.image.width)*4;
var color = scalarToHue(this.sample(x,y,layer),0,10,50);
pixels.data[i] = Math.round(color[0]*255);
pixels.data[i + 1] = Math.round(color[1]*255);
pixels.data[i + 2] = Math.round(color[2]*255);
pixels.data[i + 3] = 255;
}
}
ctx.putImageData(pixels, 0, 0);
this.image.src = c.toDataURL("image.png");
また、私はクロムを使用しています。
わかりました。私はキャンバスのサイズを決して決めることはないので、キャンバスのデフォルトは300x150になります。他の画像は300x150よりも大きく、ctx.createImageDataを呼び出すと、入力した寸法に合わせて自動的にキャンバスが大きくなりますので、これは他の画像では問題にはなりませんでした。いずれにしても、 'c.width = this.image.width; c.height = this.image.height; '問題を修正します。 – Kenkron