zoukankan      html  css  js  c++  java
  • HTML5 Cavans(9) 像素处理

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title></title>
    
        <script  type="text/javascript">
            window.onload = function () {
                var cancans = document.getElementById("myCanvas");
                //得到2D渲染上下文
                var context = document.getElementById("myCanvas").getContext("2d");
                var imageData = context.createImageData(200, 200);
                var pixels = imageData.data;
                var numPixels = imageData.height * imageData.width;
    
                for (var i = 0; i < numPixels; i++) {
                    pixels[i * 4] = 255;
                    pixels[i * 4 + 1] = 0;
                    pixels[i * 4 + 2] = 0;
                    pixels[i * 4 + 3] = 255;
                }
                context.putImageData(imageData, 0, 0);
    
                //随机图片
                for (i = 0; i < numPixels; i++) {
                    pixels[i * 4] = Math.floor(Math.random() * 255);
                    pixels[i * 4 + 1] = Math.floor(Math.random() * 255);
                    pixels[i * 4 + 2] = Math.floor(Math.random() * 255);
                    pixels[i * 4 + 3] = Math.floor(Math.random() * 255);
                }
                context.putImageData(imageData, 200, 0);
    
                for (var x = 0; x < imageData.width; x++) {
                    for (var y = 0; y < imageData.height; y++) {
                        pixelRed = x * imageData.width * 4 + y * 4;
                        pixelGreen = pixelRed + 1;
                        pixelBlue = pixelRed + 2;
                        pixelAlpha = pixelRed + 3;
    
                        if (x < 100 && y < 100) {
                            pixels[pixelRed] = 255;
                            pixels[pixelGreen] = 0;
                            pixels[pixelBlue] = 0;
                            pixels[pixelAlpha] = 255;
                        }
                        else {
                            pixels[pixelRed] = 0;
                            pixels[pixelGreen] = 255;
                            pixels[pixelBlue] = 0;
                            pixels[pixelAlpha] = 255;
                        }
                    }
                }
                //后4个参数分别是,imagedata画上去时的原点坐标dx,dy,宽度,长度
                //后面的dx,dy是相对前2个参数x,y的偏移,图形会偏移
                //就是实际画的位置是(x+dx,y+dy)
                context.putImageData(imageData, 0, 200, 50, 0, 100, 100);
    
    
                //马赛克效果
                var img2 = new Image();
    
                img2.src = "images/wsj.jpg";
                img2.onload = function () {
                    context.drawImage(img2, 0, 0, img2.width, img2.height, 200, 200, 200, 200);
                    var imagedata = context.getImageData(200, 200, 200, 200);
                    pdata = imagedata.data;
                    var numTilerows = 9;//行色块个数
                    var numTilecols = 9;//列色块个数
                    var tileWitdh = Math.floor(imagedata.width / numTilecols);
                    var tileHight = Math.floor(imagedata.height / numTilerows);
    
                    for (var i = 0; i < numTilerows; i++) {
                        for (var j = 0; j < numTilecols; j++) {
                            var tempData = context.getImageData(200 + j * tileWitdh, 200 + i * tileHight, 1, 1).data;
                            var pR = tempData[0];
                            var pG = tempData[1];
                            var pB = tempData[2];
                            var pA = tempData[3];
                            
                            var pixelColor = "rgba(" + pR + "," + pG + "," + pB + "," + pA + ")";
                            context.fillStyle = pixelColor;
                            context.fillRect(200 + j * tileWitdh, 200 + i * tileHight, tileWitdh, tileHight);
                            //也可以先操作图片的每个像素,最后画到画布里
    //                        for (var tr = 0; tr < tileHight; tr++) {
    //                            for (var td = 0; td < tileWitdh; td++) {
    //                                var t = (i * tileHight + tr) * 4 * imagedata.width + (j * tileWitdh + td) * 4;
    //                                pdata[t] = pR;
    //                                pdata[t + 1] = pG;
    //                                pdata[t + 2] = pB;
    //                                pdata[t + 3] = pA;
    //                            }
    //                        }
                        }
                    }
                   // context.putImageData(imagedata, 200, 200, 200, 200);
                }
            };
        </script>
    </head>
    <body>
        <canvas id="myCanvas" height="500px" width="500px" style="border:1px black solid">
        </canvas>
    </body>
    </html>
  • 相关阅读:
    JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
    JVM 性能调优实战之:一次系统性能瓶颈的寻找过程
    MongoDB之一介绍(MongoDB与MySQL的区别、BSON与JSON的区别)
    spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程
    SpringBoot自动化配置之四:SpringBoot 之Starter(自动配置)、Command-line runners
    分析诊断工具之一:MYSQL性能查看(多指标)
    Condition-线程通信更高效的方式
    微服务监控之一:Metrics让微服务运行更透明
    游戏后台服务技术选型
    TCP之四:TCP 滑动窗口协议 详解
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2585890.html
Copyright © 2011-2022 走看看