zoukankan      html  css  js  c++  java
  • Canvas createImageData

    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>
  • 相关阅读:
    虚函数
    类的继承
    析构
    构造
    枚举类型
    c++中的静态类型 static
    c++中的类
    sizeof和strlen的区别
    剑指36 二叉搜索书与双向链表
    剑指35 复杂链表的复制
  • 原文地址:https://www.cnblogs.com/stono/p/4670258.html
Copyright © 2011-2022 走看看