キャンバスに画像を読み込んでいます。 drawImage()、getImageData()を操作変数に格納します。私は、例えば、さまざまなフィルタを追加/削除するなど、何度もデータを操作できるようにしたいと考えています。どのように私はputImageData()で画像を描画するたびに更新されるようにデータを格納できますか?キャンバス/写真 - getImageDataが機能しない
基本的に、私はgetImageDataの使用を誤解しているか、間違って使用していると思います。私の考えは、画像に対して行われた操作は、getImageDataを実行し、情報を含む変数を更新し、画像を「再描画」するために使用することでした。
例: 以下のスニペットでは、画像を白黒にする機能を実行します。私はそれがクリックされたときに画像のサイズを変更する別の機能を持っています。 画像のサイズを変更すると、白黒のフィルタが消えます。画像の情報を保持するために私は間違って何をしていますか?
//Read in picture
var reader = new FileReader();
reader.onload = function leDraw(e){
imgObj = new Image();
picWidth = canvas.width/2;
picHeight = canvas.height/2;
imgObj.src = e.target.result;
newX = 0;
newY = 0;
ctx.drawImage(imgObj,0,0, picWidth, picHeight);
imageData = ctx.getImageData(newX,newY, canvas.width, canvas.height);
originalCopy = ctx.getImageData(newX,newY, picWidth, picHeight);
data = imageData.data;
function resize(val){ Resizes picture
userPicHeight = document.getElementById("cSelect").value;
userPicWidth = document.getElementById("cSelect").value;
ctx.clearRect(0,0, canvas.width, canvas.height);
ctx.drawImage(imgObj, newX, newY, userPicWidth, userPicHeight);
window['imageData'] = ctx.getImageData(newX,newY, userPicWidth, userPicHeight);
ctx.putImageData(imageData, newX, newY);
};
ありがとう、これは私のためにいくつかの物事をクリアして動作するように私にいくつかのアイデアを提供します。私にとって問題が残っている小さなことの1つは、実際の「スケーリング」は、スライダーからのユーザーの入力に基づいて行われることです。さらに、プロジェクトはフォトエディタのようなものなので、ユーザーはクリックしてドラッグすると写真を移動したり、複数のフィルタを変更したり追加したりすることができます。この例は私に確かにいくつかのアイデアを与えてくれます。 – swam
あなたは大歓迎です。はい。キャッシュされたフィルタキャンバスを使用すると、毎回リフィルする必要がないため、リサイズがより効率的になります。 – markE