HTML5 canvas getImageData() ·½·¨

ʵÀý

ÏÂÃæµÄ´úÂëͨ¹ý getImageData() ¸´ÖÆ»­²¼ÉÏÖ¸¶¨¾ØÐεÄÏñËØÊý¾Ý£¬È»ºóͨ¹ý putImageData() ½«Í¼ÏñÊý¾Ý·Å»Ø»­²¼£º

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="red";
ctx.fillRect(10,10,50,50);

function copy()
{
var imgData=ctx.getImageData(10,10,50,50);
ctx.putImageData(imgData,10,70);
}

Ç××ÔÊÔÒ»ÊÔ

ä¯ÀÀÆ÷Ö§³Ö

Internet Explorer 9¡¢Firefox¡¢Opera¡¢Chrome ÒÔ¼° Safari Ö§³Ö getImageData() ·½·¨¡£

×¢ÊÍ£ºInternet Explorer 8 »ò¸üÔçµÄä¯ÀÀÆ÷²»Ö§³Ö <canvas> ÔªËØ¡£

¶¨ÒåºÍÓ÷¨

getImageData() ·½·¨·µ»Ø ImageData ¶ÔÏ󣬸öÔÏó¿½±´ÁË»­²¼Ö¸¶¨¾ØÐεÄÏñËØÊý¾Ý¡£

¶ÔÓÚ ImageData ¶ÔÏóÖеÄÿ¸öÏñËØ£¬¶¼´æÔÚ×ÅËÄ·½ÃæµÄÐÅÏ¢£¬¼´ RGBA Öµ£º

  • R - ºìÉ« (0-255)
  • G - ÂÌÉ« (0-255)
  • B - À¶É« (0-255)
  • A - alpha ͨµÀ (0-255; 0 ÊÇ͸Ã÷µÄ£¬255 ÊÇÍêÈ«¿É¼ûµÄ)

color/alpha ÒÔÊý×éÐÎʽ´æÔÚ£¬²¢´æ´¢ÓÚ ImageData ¶ÔÏóµÄ data ÊôÐÔÖС£

Ìáʾ£ºÔÚ²Ù×÷Íê³ÉÊý×éÖÐµÄ color/alpha ÐÅÏ¢Ö®ºó£¬Äú¿ÉÒÔʹÓà putImageData() ·½·¨½«Í¼ÏñÊý¾Ý¿½±´»Ø»­²¼ÉÏ¡£

Àý×Ó£º

ÒÔÏ´úÂë¿É»ñµÃ±»·µ»ØµÄ ImageData ¶ÔÏóÖеÚÒ»¸öÏñËØµÄ color/alpha ÐÅÏ¢£º

red=imgData.data[0];
green=imgData.data[1];
blue=imgData.data[2];
alpha=imgData.data[3];

Ç××ÔÊÔÒ»ÊÔ

Ìáʾ£ºÄúÒ²¿ÉÒÔʹÓà getImageData() ·½·¨À´·´×ª»­²¼ÉÏij¸öͼÏñµÄÿ¸öÏñËØµÄÑÕÉ«¡£

ʹÓøù«Ê½±éÀúËùÓеÄÏñËØ£¬²¢¸Ä±äÆäÑÕɫֵ£º

red=255-old_red;
green=255-old_green;
blue=255-old_blue;

£¨Çë¼ûÏÂÃæµÄ¡°Ç××ÔÊÔÒ»ÊÔ¡±ÊµÀý¡££©

JavaScript Óï·¨

var imgData=context.getImageData(x,y,width,height);

²ÎÊýÖµ

²ÎÊý ÃèÊö
x ¿ªÊ¼¸´ÖƵÄ×óÉϽÇλÖÃµÄ x ×ø±ê¡£
y ¿ªÊ¼¸´ÖƵÄ×óÉϽÇλÖÃµÄ y ×ø±ê¡£
width ½«Òª¸´ÖƵľØÐÎÇøÓòµÄ¿í¶È¡£
height ½«Òª¸´ÖƵľØÐÎÇøÓòµÄ¸ß¶È¡£

¸ü¶àʵÀý

ҪʹÓõÄͼÏñ£º

The Tulip

ʹÓà getImageData() À´·´×ª»­²¼ÉϵÄͼÏñµÄÿ¸öÏñËØµÄÑÕÉ«¡£

Your browser does not support the HTML5 canvas tag.

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("tulip");
ctx.drawImage(img,0,0);
var imgData=ctx.getImageData(0,0,c.width,c.height);
// ·´×ªÑÕÉ«
for (var i=0;i<imgData.data.length;i+=4)
  {
  imgData.data[i]=255-imgData.data[i];
  imgData.data[i+1]=255-imgData.data[i+1];
  imgData.data[i+2]=255-imgData.data[i+2];
  imgData.data[i+3]=255;
  }
ctx.putImageData(imgData,0,0);

Ç××ÔÊÔÒ»ÊÔ

VUE