Baseline Widely available
Canvas 2D API ã® CanvasRenderingContext2D.putImageData()
ã¡ã½ããã¯ãæå®ã® ImageData
ãªãã¸ã§ã¯ãã®ãã¼ã¿ããã£ã³ãã¹ã«æç»ãã¾ããæ´æ°å¯¾è±¡ã®ç©å½¢ãæå®ãããå ´åã¯ããã®ç©å½¢å
ã®ãã¯ã»ã«ã®ã¿ãæç»ããã¾ãããã®ã¡ã½ããã¯ããã£ã³ãã¹ã®å¤æè¡åã®å½±é¿ãåãã¾ããã
ã¡ã¢: getImageData()
ã¡ã½ãããç¨ãã¦ããã£ã³ãã¹ããç»åãã¼ã¿ãåå¾ã§ãã¾ãã
è¨äºãã£ã³ãã¹ã¨ãã¯ã»ã«æä½ã«ãputImageData()
ããã³ãã£ã³ãã¹ã®å
容ã®ä¸è¬çãªæä½ã«é¢ãããããªãæ
å ±ãããã¾ãã
putImageData(imageData, dx, dy)
putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)
弿°
imageData
ãã¯ã»ã«å¤ã®é
åãæã£ã ImageData
ãªãã¸ã§ã¯ãã§ãã
dx
æç»å ãã£ã³ãã¹ã«ç»åãã¼ã¿ãé ç½®ããæ¨ªä½ç½® (x 座æ¨) ã§ãã
dy
æç»å ãã£ã³ãã¹ã«ç»åãã¼ã¿ãé ç½®ãã縦ä½ç½® (y 座æ¨) ã§ãã
dirtyX
çç¥å¯
ç»åãã¼ã¿ãåãåºãå§ããå·¦ä¸ã®è§ã®æ¨ªä½ç½® (x 座æ¨) ã§ããããã©ã«ãå¤ã¯ 0
ã§ãã
dirtyY
çç¥å¯
ç»åãã¼ã¿ãåãåºãå§ããå·¦ä¸ã®è§ã®ç¸¦ä½ç½® (y 座æ¨) ã§ããããã©ã«ãå¤ã¯ 0
ã§ãã
dirtyWidth
çç¥å¯
æç»ããç©å½¢ã®å¹ ã§ããããã©ã«ãå¤ã¯ç»åãã¼ã¿ã®å¹ ã§ãã
dirtyHeight
çç¥å¯
æç»ããç©å½¢ã®é«ãã§ããããã©ã«ãå¤ã¯ç»åãã¼ã¿ã®é«ãã§ãã
ãªã (undefined
)
NotSupportedError
DOMException
弿°ã®ãããããç¡éã®ã¨ãæãããã¾ãã
InvalidStateError
DOMException
æå®ããã ImageData
ãªãã¸ã§ã¯ãã®ãã¼ã¿ããã¿ããããã¦ããã¨ãæãããã¾ãã
ãã®ã¢ã«ã´ãªãºã ãä¸ã§ä½ããã£ã¦ããããçè§£ããããã«ãCanvasRenderingContext2D.fillRect()
ãç¨ããå®è£
ãç¨æãã¾ããã
<canvas id="canvas"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
function putImageData(
ctx,
imageData,
dx,
dy,
dirtyX,
dirtyY,
dirtyWidth,
dirtyHeight,
) {
const data = imageData.data;
const height = imageData.height;
const width = imageData.width;
dirtyX = dirtyX || 0;
dirtyY = dirtyY || 0;
dirtyWidth = dirtyWidth !== undefined ? dirtyWidth : width;
dirtyHeight = dirtyHeight !== undefined ? dirtyHeight : height;
const limitBottom = dirtyY + dirtyHeight;
const limitRight = dirtyX + dirtyWidth;
for (let y = dirtyY; y < limitBottom; y++) {
for (let x = dirtyX; x < limitRight; x++) {
const pos = y * width + x;
ctx.fillStyle = `rgba(${data[pos * 4 + 0]}, ${data[pos * 4 + 1]}, ${
data[pos * 4 + 2]
}, ${data[pos * 4 + 3] / 255})`;
ctx.fillRect(x + dx, y + dy, 1, 1);
}
}
}
// å
容ããã£ã³ãã¹ã«æç»ãã
ctx.fillRect(0, 0, 100, 100);
// æç»å
容ãã ImageData ãªãã¸ã§ã¯ããçæãã
const imagedata = ctx.getImageData(0, 0, 100, 100);
// putImageData ã®åä½ã®èª¬æç¨ã® putImageData 颿°ãç¨ãã
putImageData(ctx, imagedata, 150, 0, 50, 50, 25, 25);
çµæ ãã©ã¦ã¶ã¼ã®æé©åã«ãããã¼ã¿ã®æ¶å¤±
è¦å: ä¹ç®æ¸ã¿ã¢ã«ãã¡ã«ã©ã¼å¤ã¨ã®å¤æã§ã¯ãã¼ã¿ãå£åãããããputImageData()
ã§ãã¯ã»ã«ãè¨å®ããç´å¾ã§ãã対å¿ãã getImageData()
ã§ç°ãªãå¤ã¨ãã¦èªã¿è¾¼ã¾ããå¯è½æ§ãããã¾ãã
const canvas = document.createElement("canvas");
canvas.width = 1;
canvas.height = 1;
const context = canvas.getContext("2d");
const imgData = context.getImageData(0, 0, canvas.width, canvas.height);
const pixels = imgData.data;
pixels[0 + 0] = 1;
pixels[0 + 1] = 127;
pixels[0 + 2] = 255;
pixels[0 + 3] = 1;
console.log("before:", pixels);
context.putImageData(imgData, 0, 0);
const imgData2 = context.getImageData(0, 0, canvas.width, canvas.height);
const pixels2 = imgData2.data;
console.log("after:", pixels2);
以ä¸ã®ãããªåºåã«ãªãããããã¾ããã
before: Uint8ClampedArray(4) [ 1, 127, 255, 1 ] after: Uint8ClampedArray(4) [ 255, 255, 255, 1 ]仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4