캔버스 요소를 통해 하나의 색상 (검은 색) 비트 맵 이미지 (라인 아트)를 2 색 (빨간색 및 노란색) 비트 맵 이미지 (패턴)에 적용하고 그 패턴의 빨간 픽셀들만 오버레이 된 라인 아트에 의해 색칠됩니다, 마치 교차와 같습니다. 나는 이것을 보았습니다 : https://developer.mozilla.org/en/docs/Web/Guide/HTML/Canvas_tutorial/Compositing (globalCompositeOperation> Darker method 참조) 그 효과가 필요한지 궁금했습니다. 이 방법은 더 이상 지원되지 않는 것으로 보이므로 이러한 효과를 시뮬레이션 할 수있는 방법이 있습니까? 이 용도로 사용되는 모든 이미지에는 별색 (빨간색 100 %, 노란색 100 %, 검정 100 %, 흰색 100 %) 만 포함됩니다. 모든 자바 스크립트 코드 샘플이나 해결책을 제시하는 힌트가 굉장합니다. 입력을위한 Thx.HTML5 캔버스 | 패턴 픽셀 색상을 기반으로 오버레이 된 라인 아트를 표시하는 패턴
0
A
답변
1
빨간색 부분 만 별도의 이미지로 분리 할 수 있다면 합성을 사용하여 검정색이 빨간색으로 교차하는 부분을 다시 칠할 수 있습니다.
그렇지 않으면 두 이미지의 모든 픽셀 색상을 context.getImageData
을 사용하여 가져올 수 있습니다.
그런 다음 빨간색 & 검정색이 교차하는 빨간색 픽셀을 검정색으로 변경할 수 있습니다.
예제 코드와 데모 : http://jsfiddle.net/m1erickson/pcsmbr22/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; margin:20px; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var canvasB=document.getElementById("black");
var ctxB=canvasB.getContext("2d");
var canvasC=document.getElementById("color2");
var ctxC=canvasC.getContext("2d");
ctxB.fillRect(50,50,50,100);
ctxC.fillStyle='yellow';
ctxC.fillRect(75,50,50,50);
ctxC.fillStyle='red';
ctxC.fillRect(75,100,50,50);
var iDataB=ctxB.getImageData(0,0,canvasB.width,canvasB.height);
var dataB=iDataB.data;
var iDataC=ctxC.getImageData(0,0,canvasC.width,canvasC.height);
var dataC=iDataC.data;
// copy yellow-red onto results canvas
ctx.drawImage(canvasC,0,0);
var iData=ctx.getImageData(0,0,canvas.width,canvas.height);
var data=iData.data;
// copy black pixels when intersecting red pixels
for(var i=0;i<dataC.length;i+=4){
var isBlack=(dataB[i]==0 && dataB[i+1]==0 && dataB[i+2]==0 && dataB[i+3]==255);
var isRed=(dataC[i]==255 && dataC[i+1]==0 && dataC[i+2]==0 && dataC[i+3]==255);
if(isBlack && isRed){
data[i]=0;
data[i+1]=0;
data[i+2]=0;
data[i+3]=255;
}
}
ctx.putImageData(iData,0,0);
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="black" width=200 height=200></canvas>
<canvas id="color2" width=200 height=200></canvas>
<canvas id="canvas" width=200 height=200></canvas>
</body>
</html>
관련 문제
- 1. HTML5 캔버스 체크 무늬 패턴
- 2. HTML5 캔버스 패턴 간격
- 3. HTML 캔버스 라인 패턴 회전
- 4. HTML5 캔버스 오버레이 이미지
- 5. 여러 HTML5 캔버스 오버레이
- 6. Html5 캔버스 오버레이
- 7. HTML5 캔버스 픽셀 조작
- 8. 픽셀 패턴 확인
- 9. 패턴 간의 프로세스 라인
- 10. Python의 라인 패턴 결정
- 11. Kineticjs가있는 라인 패턴
- 12. ZeroMQ 파이프 라인 패턴
- 13. Google지도에 맞춤 패턴 오버레이 추가
- 14. Fabric.js 캔버스 배경으로 축소 된 패턴 설정
- 15. HTML5 캔버스 FAST 픽셀 조작
- 16. HTML5 패턴 제외 단어
- 17. HTML5 패턴 전화 번호
- 18. JavaScript가있는 HTML5 패턴
- 19. html5 숫자 제한을위한 패턴
- 20. HTML5 정규식 패턴 검증
- 21. HTML5 작동 패턴
- 22. HTML5 패턴 일치
- 23. 전체 페이지 배경 이미지 (패턴 오버레이 포함)
- 24. grep을 사용하여 라인 패턴 일치
- 25. 데이터베이스에서 HTML5 캔버스 라인 포인트
- 26. 그려진 개체로 HTML5 캔버스 패턴 채우기 스타일을 만드는 방법은 무엇입니까?
- 27. CocoonJS 캔버스 이미지 패턴 내가 GUI를 그릴 HTML5 캔버스를 사용하고
- 28. 정규식 멀티 라인 검색 패턴
- 29. 이미지의 패턴 인식
- 30. Html5 캔버스의 패턴 크기 변경
니스! 또한 색상의 음영을 포함하는 픽셀에 적용되는 유사한 이상을 생성하는 코드를 발견했습니다. http : //jsfiddle.net/26N7S/3/ – koolness