-
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; //Redpixels[i*4+1] = avg; //Greenpixels[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]; //Reddatas[i + 1] = 255 - datas[i + 1]; //Greendatas[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