画像からピクセルのRGBAデータを読み込むのに問題があります。しかし、すべてのRGBAデータ(すべてのピクセルで4バイトすべて)のゼロ値に直面しています。 私はこのコードをJavaScript用に使用しています:JavaScriptの考え方によるピクセルデータの読み込み
ところで、私はこのコードをhtmlに使います。 と私はChromeやFirefoxでhtmlを実行しますが、コンソールログを見るとピクセルデータのすべての値はゼロです。なぜですか?
var canvas= document.getElementById('mycanvas');
var c=canvas.getContext("2d");
// c.beginPath();
// c.moveTo(0,0);
// c.lineTo(500,200);
// c.stroke();
var img = new Image();
img.src = 'https://mdn.mozillademos.org/files/5397/rhino.jpg';
img.crossOrigin = "Anonymous";
// var img= document.getElementById('image')
img.onload=function() {
\t \t c.drawImage(img,0,0);
}
var myImageData = c.getImageData(0, 0, 500, 500);
//var myImageData = c.createImageData(600, 600);
var numBytes = myImageData.data.length;
var pixelData=myImageData.data;
console.log (numBytes);
console.log (pixelData);
// var x= function() {
\t
// for(var i=0;i<pixelData.length;i+=40)
// {
// pixelData[i] = 255 - pixelData[i]; // red
// pixelData[i + 1] = 255 - pixelData[i + 1]; // green
// pixelData[i + 2] = 255 - pixelData[i + 2]; // blue
// }
// c.putImageData(myImageData, 0, 0);
// };
// //if (pixelData[i]&&pixelData[i+1]&&pixelData[i+2]===255) {
// //console.log (numBytes);
// //}
// //else {}
// //};
// //
// x();
//pixel = imageData.data[((row * (imageData.width * 4)) + (colume * 4)) + colorindex];
//var img = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); // here is the most important part because if you dont replace you will get a DOM 18 exception.
//window.location.href=image;
<!DOCTYPE html>
<html>
<head>
\t <title>Image processing</title>
\t <style type="text/css">
\t
</style>
</head>
<body>
<canvas id="mycanvas" width="300" height="227">
\t
</canvas>
<img src="https://mdn.mozillademos.org/files/5397/rhino.jpg" id="image" style="display:none;">
\t
</style>
\t
</style>="">
<script src="img.js">
</script>
\t
</body>
</html>
[CanvasContext2DのdrawImage()の問題の可能性の重複\ [onloadとCORS \]](https://stackoverflow.com/questions/32880641/canvascontext2d-drawimage-issue-onload-and-cors) – Kaiido
イメージがロードされ、cで描画されるまで待つ必要がありますanvasを取得してからimageDataを取得します。 ここでは、 'onload'ハンドラからgetImageDataを呼び出しています。つまり、' img.src = "..."の直後に呼び出されます。 img.crossOrigin = "..."; '非同期+ javascript"を検索します。 – Kaiido