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>
  • 相关阅读:
    bzoj 3670: [Noi2014]动物园
    bzoj 2878: [Noi2012]迷失游乐园
    51nod 1348 乘积之和
    51nod 1514 美妙的序列
    AtCoder Grand Contest 002 D
    bzoj 3451 Normal
    LOJ #6119. 「2017 山东二轮集训 Day7」国王
    51nod 1752 哈希统计
    计蒜客 百度地图的实时路况
    Codeforces 549F Yura and Developers
  • 原文地址:https://www.cnblogs.com/stono/p/4670258.html
Copyright © 2011-2022 走看看