HTML5 캔버스에는 명시 적으로 단일 픽셀을 설정하는 방법이 없습니다.HTML5 캔버스의 픽셀 설정 최적화
사용
getImageData
및putImageData
하지만 효율성으로 인해rect
또는 같은putImageData
사용 무거운 물체의 낮은 성능 애니메이션 너무 낮 :
내가 지금까지 알고있는 솔루션입니다
putImageData
하나의 픽셀을 그릴 수 있지만 그릴 픽셀이 많이있을 때 성능이 훨씬 나빠진 것 같습니다.
나는 우리가 drawImage(new Image(w,h))
에 의해 putImageData
를 교체 할 경우 drawImage
기능은 정말 빨리 putImageData
보다 실제로는 것을 보았다, 정말 빠릅니다. 그러나 나는 픽셀 단위로 빠르게 설정 될 수있는 drawImage
의 인수에 이미지를 넣는 해결책을 모른다.
그녀의 느린 코드의 예입니다
HTML :
<canvas id="graph1" width="1900" height="1000"></canvas>
자바 스크립트 :
var canvas=document.getElementById("graph1"),
ctx=canvas.getContext("2d"),
imageData,
data,
w=canvas.width,
loop=0,
t=Date.now();
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000/60);
};
})();
function animate() {
imageData=ctx.createImageData(w, canvas.height);
data=imageData.data;
for(i=0;i<30000;i++) { // Loop fast enough
x=Math.round(w*Math.random());
y=Math.round(canvas.height*Math.random());
data[((w * y) + x) * 4]=255;
data[((w * y) + x) * 4+1]=0;
data[((w * y) + x) * 4+2]=0;
data[((w * y) + x) * 4+3]=255;
}
ctx.putImageData(imageData, 0, 0); //Slow
//ctx.drawImage(new Image(canvas.width, canvas.height),0,0);// Would be about 4x faster even if ImageData would be also blank
requestAnimFrame(function() {
loop++;
if(loop<100)
animate();
else
alert('finish:'+(Date.now()-t));
});
}
animate();
사람이 성능을 향상시킬 수있는 단서가있는 경우
.
fillRect (x, y, 1,1)로 픽셀을 넣으려고 했습니까? – GameAlchemist
이 메시지를 작성한 이후로 브라우저가 진화했을 수도 있지만, 당시 rect 객체를 사용하여 테스트 한 결과 모든 솔루션보다 훨씬 최악이었습니다. – Hentold