ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CANVAS 연습11(색상 변경)
    게임/HTML 연습 2018. 6. 27. 23:05
    반응형
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>CANVAS 연습11</title>
    </head>
    <body>
    <canvas id="myCanvas" width="800" height="600" style="border: 1px dotted blue"></canvas>
    <script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");

    ctx.fillStyle = "red";
    ctx.fillRect(20, 30, 100, 100);
    ctx.fillStyle = "green";
    ctx.fillRect(50, 50, 100, 100);


    //캔버스의 일부분 가져오기
    var src1 = ctx.getImageData(0, 0, 100, 100); //캔버스의 일부분을 선택하여 이미지를 가져온다.
    //context.getImageData(x(x좌표), y(y좌표), width(가로), height(높이));
    ctx.putImageData(src1, 200, 50); // 위에서 얻은 이미지를 출력한다.
    //context.putImageData(imgData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
    //imgData: getImageData로 가져온 이미지 값, x: x좌표, y: y좌표
    //dirtyX: 가져올 이미지의 x좌표, dirtyY: 가져올 이미지의 y좌표
    //dirtyWidth: 가져와서 그릴 사각형의 가로, dirtyHeight: 가져와서 그릴 사각형의 높이
    ctx.strokeRect(0, 0, 100, 100);
    ctx.strokeRect(200, 50, 100, 100);


    //지정한 부분의 색상을 흑백으로 바꾸어 출력
    var src2 = ctx.getImageData(0, 0, 100, 100);
    pixels = src2.data; //지정한 영역의 이미지를 data로 가져온다 (rgb 배열로 되어있다.)
    var numPixels = pixels.length; // 픽셀의 개수를 변수로 저장
    for (var i = 0; i < numPixels; i++) { // 각 픽셀의 색상값을 흑백으로 변경하여 저장
    var avg = (pixels[i*4] + pixels[i*4+1] + pixels[i*4+2])/3;
    pixels[i*4] = avg; //Red
    pixels[i*4+1] = avg; //Green
    pixels[i*4+2] = avg; //Blue
    };
    ctx.putImageData(src2, 350, 50); //흑백으로 저장된 이미지 출력
    ctx.strokeRect(350, 50, 100, 100);


    //지정한 부분의 색상 반전시키기
    var src3 = ctx.getImageData(0, 0, 100, 100);
    var datas = src3.data;
    var numPixels3 = datas.length;


    for (i = 0; i < numPixels3; i += 4) { //각 픽셀의 색상값을 반전시켜 저장
    datas[i] = 255 - datas[i]; //Red
    datas[i + 1] = 255 - datas[i + 1]; //Green
    datas[i + 2] = 255 - datas[i + 2]; //Blue
    };

    ctx.putImageData(src3, 500, 50);
    ctx.strokeRect(500, 50, 100, 100);



    //이미지에서 영역을 선택하여 색상 반전시키기
    var img = new Image();
    img.src = "images/house.jpg";
    img.onload = function() {
    draw(this);
    };

    function draw (img) {
    ctx.drawImage(img, 200, 250);
    var src4 = ctx.getImageData(200, 250, 100, 100);
    var datas4 = src4.data;
    var numPixels4 = datas4.length;


    for (var i = 0; i < numPixels4; i += 4) {
    datas4[i] = 255 - datas4[i];
    datas4[i + 1] = 255 - datas4[i + 1];
    datas4[i + 2] = 255 - datas4[i + 2];
    };

    ctx.putImageData(src4, 200, 250);
    ctx.strokeRect(200, 250, 100, 100);
    }
    </script>
    </body>
    </html>

     

     

    결과:

     

     

    * 크롬에서는 마지막의 "이미지에서 영역을 선택하여 색상 반전시키기" 결과가 보이지 않는다.

    이유는 여전히 모르겠다.

     

     

     

     

     

     

     

     

    => images/house.jpg

     

     

     

     

     

    크기: 400px * 300px

    반응형

    '게임 > HTML 연습' 카테고리의 다른 글

    CANVAS 연습13(사각형 이동)  (0) 2018.06.29
    CANVAS 연습12(이미지 합성)  (0) 2018.06.29
    CANVAS 연습10(기울임)  (0) 2018.06.26
    CANVAS 연습9(도형 회전)  (0) 2018.06.25
    CANVAS 연습8(그림자, 위치 이동, 크기 변형)  (0) 2018.06.25
Designed by Tistory.