createImageData() 方法創建新的空白 ImageData 對象。新對象的默認像素值 transparent black。
對于 ImageData 對象中的每個像素,都存在著四方面的信息,即 RGBA 值:
- R - 紅色 (0-255)
- G - 綠色 (0-255)
- B - 藍色 (0-255)
- A - alpha 通道 (0-255; 0 是透明的,255 是完全可見的)
因此 ,transparent black 表示 (0,0,0,0)。
color/alpha 以數組形式存在,并且既然數組包含了每個像素的四條信息,數組的大小是 ImageData 對象的四倍。(獲得數組大小有更簡單的辦法,就是使用 ImageDataObject.data.length)
ImageDataObject.data.length = ImageDataObject.width*ImageDataObject.height*4;
包含 color/alpha 信息的數組存儲于 ImageData 對象的?data?屬性中。
提示:在操作完成數組中的 color/alpha 信息之后,您可以使用?putImageData()?方法將圖像數據拷貝回畫布上。
?
有兩個版本的 createImageData() 方法:
1. 以指定的尺寸(以像素計)創建新的 ImageData 對象:
var imgData=context.createImageData(width,height);
2. 創建與指定的另一個 ImageData 對象尺寸相同的新 ImageData 對象(不會復制圖像數據):
var imgData=context.createImageData(imageData);
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>createImageData</title> </head><body><canvas id='myCanvas' width='800' height='400'>your browser does not support canvas</canvas><script type="text/javascript">var c = document.getElementById('myCanvas');var ctx = c.getContext('2d');var img = new Image();img.src = 'face.jpg';img.onload = function() {// 從10,10坐標開始繪制整個圖片 ctx.drawImage(img, 10, 10);var imgData = ctx.getImageData(50, 50, 200, 200);var imgData01 = ctx.createImageData(imgData);for (var i = 0; i < imgData01.width * imgData01.height * 4; i += 4) {imgData01.data[i + 0] = 255;imgData01.data[i + 1] = 0;imgData01.data[i + 2] = 0;imgData01.data[i + 3] = 255;}ctx.putImageData(imgData01, 10, 260);var imgData02 = ctx.createImageData(100, 100);for (i = 0; i < imgData02.width * imgData02.height * 4; i += 4) {imgData02.data[i + 0] = 255;imgData02.data[i + 1] = 0;imgData02.data[i + 2] = 0;imgData02.data[i + 3] = 155;}ctx.putImageData(imgData02, 220, 260);};</script> </body></html>
?