Canvas入門基礎(chǔ)(七):像素操作

2018-06-19 14:40 更新
一、ImageData對(duì)象
ImageData對(duì)象中存儲(chǔ)著canvas對(duì)象真實(shí)的像素?cái)?shù)據(jù),它包含以下幾個(gè)只讀屬性: width 圖片寬度,單位是像素 height 圖片高度,單位是像素 data 包含著RGBA格式的整型數(shù)據(jù),范圍在0至255之間(包括255)。

我們具體來看看data屬性:
data 屬性返回一個(gè)對(duì)象,該對(duì)象包含指定的 ImageData 對(duì)象的圖像數(shù)據(jù)。
對(duì)于 ImageData 對(duì)象中的每個(gè)像素,都存在著四方面的信息,即 RGBA 值: R - 紅色(0-255) G - 綠色(0-255) B - 藍(lán)色(0-255) A - alpha 通道(0-255; 0 是透明的,255 是完全可見的) color/alpha 信息以數(shù)組形式存在,并存儲(chǔ)于 ImageData 對(duì)象的 data 屬性中。
二、 創(chuàng)建一個(gè)ImageData對(duì)像
有兩個(gè)版本的 createImageData() 方法: 2.1 以指定的尺寸(以像素計(jì))創(chuàng)建新的 ImageData 對(duì)象:

var imgData=cxt.createImageData(width,height);

一個(gè)新的具體特定尺寸的ImageData對(duì)像。所有像素被預(yù)設(shè)為透明黑。
例子:
下面的代碼中,我創(chuàng)建了一個(gè)100*100像素的 ImageData 對(duì)象,然后為每個(gè)像素添加顏色

var imgData=cxt.createImageData(100,100); for(var i=0;i<imgData.data.length;i+=4){ imgData.data[i+0]=255; imgData.data[i+1]=0; imgData.data[i+2]=0; imgData.data[i+3]=255; } cxt.putImageData(imgData,10,10);


//第一個(gè)像素變?yōu)榧t色

data[0]=255; //R

data[1]=0; //G

data[2]=0; //B

data[3]=255; //A

2. 2 創(chuàng)建與指定的另一個(gè) ImageData 對(duì)象尺寸相同的新 ImageData 對(duì)象(不會(huì)復(fù)制圖像數(shù)據(jù)):

var imgData=cxt.createImageData(imageData);


三、得到場(chǎng)景像素?cái)?shù)據(jù)

cxt.getImageData(x,y,width,height);

x 開始復(fù)制的左上角位置的 x 坐標(biāo)(以像素計(jì))。 y 開始復(fù)制的左上角位置的 y 坐標(biāo)(以像素計(jì))。 width 要復(fù)制的矩形區(qū)域的寬度。 height 要復(fù)制的矩形區(qū)域的高度。

例子:顏色反轉(zhuǎn)

var img=new Image(); img.src="mm.jpg"; img.onload=function(){ cxt.drawImage(img,10,10); var imgData=cxt.getImageData(10,10,200,300); var data=imgData.data; for(var i=0;i<data.length;i+=4){ data[i]=255-data[i]; data[i+1]=255-data[i+1]; data[i+2]=255-data[i+2]; data[i+3]=255; } cxt.putImageData(imgData,230,10); }


是不是很有透視感呢。

四、在場(chǎng)景中寫入像素?cái)?shù)據(jù)

cxt.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);

imgData 規(guī)定要放回畫布的 ImageData 對(duì)象。 x ImageData 對(duì)象左上角的 x 坐標(biāo),以像素計(jì)。 y ImageData 對(duì)象左上角的 y 坐標(biāo),以像素計(jì)。 dirtyX 可選。水平值(x),以像素計(jì),在畫布上放置圖像的位置。 dirtyY 可選。垂直值(y),以像素計(jì),在畫布上放置圖像的位置。 dirtyWidth 可選。在畫布上繪制圖像所使用的寬度。 dirtyHeight 可選。在畫布上繪制圖像所使用的高度。



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)