最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

HTML5CANVAS:像素处理

来源:动视网 责编:小采 时间:2020-11-27 15:16:52
文档

HTML5CANVAS:像素处理

HTML5CANVAS:像素处理:我们可以直接从HTML5 canvas中获取单个像素。通过ImageData对象我们可以以读写一个数据数组的方式来操纵像素数据。当完成像素操作之后,如果要显示它们,需要将这些像素复制到canvas上。 创建一个ImageData 对象要创建一个ImageData对象,可以使用2
推荐度:
导读HTML5CANVAS:像素处理:我们可以直接从HTML5 canvas中获取单个像素。通过ImageData对象我们可以以读写一个数据数组的方式来操纵像素数据。当完成像素操作之后,如果要显示它们,需要将这些像素复制到canvas上。 创建一个ImageData 对象要创建一个ImageData对象,可以使用2
 我们可以直接从HTML5 canvas中获取单个像素。通过ImageData对象我们可以以读写一个数据数组的方式来操纵像素数据。当完成像素操作之后,如果要显示它们,需要将这些像素复制到canvas上。

创建一个ImageData 对象

要创建一个ImageData对象,可以使用2D上下文的createImageData()方法。

var canvas = document.getElementById("ex1");
var context = canvas.getContext("2d");
 
var width = 100;
var height = 100;
var imageData = context.createImageData(width, height);

ImageData对象代表canvas中某个区域的底层像素数据。它包含三个只读的属性:

  • width:图像的宽度,单位像素。

  • height:图像的高度,单位像素。

  • data:包含像素值的一维数组。

  • 上面的例子中创建了一个100x100像素的ImageData对象。

    管理像素

    在data数组中的每一个像素包含4个字节的值。也就是说每一个像素由4个字节表示,每一个字节分别表示红色,绿色,蓝色和一个透明度alpha通道(RGBA)。像素的颜色由红、绿、蓝混合得到的最终颜色决定。透明度alpha通道决定这个像素的透明度。红、绿、蓝和alpha通道的值都在0-255之间。这和photoshop中的光的三原色RGB的原理是相同的。

    要读取一个像素的值,你可以使用下面的代码:

    var pixelIndex = 0;
    var red = imageData.data[pixelIndex ]; // 红色
    var green = imageData.data[pixelIndex + 1]; // 绿色
    var blue = imageData.data[pixelIndex + 2]; // 蓝色
    var alpha = imageData.data[pixelIndex + 3]; // 透明度

    如果要接收后面的像素值,可以增加pixelIndex的值为4的倍数。你可以通过下面的方法来计算给定像素的index值。

    var index = 4 * (x + y * width);

    在上面的语句中,x和y表示该像素在像素网格中的坐标位置。data数组中的像素会被初始化为一个很长的像素序列网格。它从左上角开始,然后向前移动。当到达一行的末尾时,接着从下一行开始显示。

    下面的图像时一个20像素宽,8像素高的ImageData像素数组。如图所示,序列从左上角开始,然后向右移动,当到达一行的最大时再换行显示。

    复制像素到canvas上

    当你完成了像素操作,你可以使用2D上下文的putImageData()函数将它们复制到canvas上。putImageData()函数有两种格式。第一种格式是复制所有的像素到canvas中。下面是一个示例代码:

    var canvasX = 25;
    var canvasY = 25;
     
    context.putImageData(imageData, canvasX, canvasY);

    canvasX和canvasY参数是canvas上插入像素的x和y坐标。

    第二种格式的putImageData()函数可以复制一个矩形区域的像素到canvas中。下面是一个示例代码:

    var canvasX = 25;
    var canvasY = 25;
    var sx = 0;
    var sy = 0;
    var sWidth = 25;
    var sHeight = 25;
    context.putImageData(imageData, canvasX, canvasY,
     sx, sy, sWidth, sHeight);

    sx和sy参数(sourceX 和 sourceY)是矩形左上角的x和y坐标。

    sWidth和sHeight参数(sourceWidth 和 sourceHeight)是矩形的宽度和高度。

    从canvas中获取像素

    我们也可以从canvas上获取一个矩形区域的像素到一个ImageData对象中。通过getImageData函数可以完成这个操作。例如下面的代码:

    var x = 25;
    var y = 25;
    var width = 100;
    var height = 100;
    var imageData2 = context.getImageData(x, y, width, height);

    x和y参数是从canvas上获取的矩形的左上角的坐标。

    width和height参数是从canvas上获取的矩形的宽度和高度。

    文档

    HTML5CANVAS:像素处理

    HTML5CANVAS:像素处理:我们可以直接从HTML5 canvas中获取单个像素。通过ImageData对象我们可以以读写一个数据数组的方式来操纵像素数据。当完成像素操作之后,如果要显示它们,需要将这些像素复制到canvas上。 创建一个ImageData 对象要创建一个ImageData对象,可以使用2
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top