1
私は自分のページに複数のcanvas
を持っています。 canvas
が2つ以上重なっている場合、すべてのピクセルの色をcanvas
にしたいと思います。キャンバス - 複数のキャンバススーパーインポーズでピクセルカラーを取得
下記の私の例をご覧ください。
この例では、すべての赤色のピクセルの色を取得したいと思いますが、キャンバスが重ねられているため、最初のピクセルが返されます。
私は同じz-index
を試してみましたが、成功しませんでした。
var c = document.getElementById("myCanvas-1");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.lineWidth=7;
ctx.arc(100, 100, 50, 0, 2 * Math.PI);
ctx.strokeStyle = '#ff0000';
ctx.stroke();
var c = document.getElementById("myCanvas-2");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.lineWidth=7;
ctx.arc(100, 100, 50, 0, 2 * Math.PI);
ctx.strokeStyle = '#ff0000';
ctx.stroke();
function findPos(obj) {
var curleft = 0, curtop = 0;
if (obj.offsetParent) {
do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return { x: curleft, y: curtop };
}
return undefined;
}
function rgbToHex(r, g, b) {
if (r > 255 || g > 255 || b > 255)
throw "Invalid color component";
return ((r << 16) | (g << 8) | b).toString(16);
}
$('.can').mousemove(function(e) {
var pos = findPos(this);
var x = e.pageX - pos.x;
var y = e.pageY - pos.y;
var coord = "x=" + x + ", y=" + y;
var c = this.getContext('2d');
var p = c.getImageData(x, y, 1, 1).data;
var hex = "#" + ("000000" + rgbToHex(p[0], p[1], p[2])).slice(-6);
$('#status').html(coord + "<br>" + hex + "<br>");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas class="can" id="myCanvas-1" width="300" height="200" ></canvas>
<canvas class="can" id="myCanvas-2" width="300" height="200" style="position:relative;left:-250px" ></canvas>
<div id="status"></div>
ありがとうございますが、同じ結果です。 'hex1 = hex2'と2番目のキャンバスのピクセルを取得しません。あなたは実践的な例を持っていますか? –
両方のキャンバスで同じ位置に同じものを描画しているので、16進数の値は同じです。これは正常です。おそらく私はあなたの質問を正しく持っていないでしょう。何を正確にアーカイブしますか? – michaPau
はい、私はあなたの言うことを理解しています。ありがとうございました。 –