drawImage
을 사용하여 캔버스 요소에 드로잉 할 정적 이미지 (a png)가 있습니다.크기가 조정 된 캔버스 요소에 putImageData를 사용하여 이미지 데이터 업데이트
var _canvas = null;
var _context = null;
var _curImageData;
function copyImageToCanvas(aImg)
{
_canvas = document.getElementById("canvas");
var w = aImg.naturalWidth;
var h = aImg.naturalHeight;
_canvas.width = w;
_canvas.height = h;
_context = _canvas.getContext("2d");
_context.clearRect(0, 0, w, h);
_context.drawImage(aImg, 0, 0);
_curImageData = _context.getImageData(0, 0, w, h);
}
다음 화소에 의해 화상 데이터의 화소를 사용
putImageData
캔버스를 업데이트 한 후 및 (화소 값에 따라 0 또는 255로 불투명도를 설정) 조작
.
function updateImage(maxPixelValToShow)
{
for (var x = 0; x < _curImageData.width; x++)
for (var y = 0; y < _curImageData.height; y++)
{
var offset = (y * _curImageData.width + x) * 4;
var r = _curImageData.data[offset];
var g = _curImageData.data[offset + 1];
var b = _curImageData.data[offset + 2];
var a = _curImageData.data[offset + 3];
var pixelNum = ((g * 255) + b);
//if greater than max or black/no data
if (pixelNum > maxPixelValToShow || (!r && !g && !b)) {
_curImageData.data[offset + 3] = 0;
} else {
_curImageData.data[offset + 3] = 255;
}
}
_context.putImageData(_curImageData, 0, 0);
}
그리고이 모든 것이 완벽하게 작동합니다. 내가 겪고있는 문제는 캔버스를 내 이미지 크기의 두 배 (또는 그 크기의 절반 크기) 만들고 캔버스 크기에 맞게 이미지를 그릴 때입니다. 내 updateImage
함수를 호출 할 때
function copyImageToCanvas(aImg)
{
_canvas = document.getElementById("canvas");
var w = aImg.naturalWidth * 2; //double the size!
var h = aImg.naturalHeight * 2; //double the size!
_canvas.width = w;
_canvas.height = h;
_context = _canvas.getContext("2d");
_context.clearRect(0, 0, w, h);
_context.drawImage(aImg, 0, 0, w, h);
_curImageData = _context.getImageData(0, 0, w, h);
}
나는 내 이미지의 가장자리 주위에 이상한 유물을 많이 받고 있어요. 누구나) 왜 이런 일이 벌어지고 있는지, b) 내가 그것에 대해 무엇을 할 수 있는지 알고 있습니까?
The original image after my updateImage
function call
The resized image after my updateImage
function call
[해결책],536,913,632 : 여기
생성되고 있는지 표시하는 일부 이미지들이다 10 감사합니다 아담과 sunetos, 그게 문제였습니다. 하나의 캔버스가 원본 파일 데이터를 저장하고 픽셀 조작을 수행하고 또 다른 캔버스 만 표시하도록 설정하면 제대로 작동합니다. 코드 아래 :function updateImage(maxPixelValToShow) {
//manipulate the _workingContext data
_workingContext.putImageData(_curImageData, 0, 0);
_displayContext.clearRect(0, 0, _workingCanvas.width*_scale, _workingCanvas.height*_scale);
_displayContext.drawImage(_workingCanvas, 0, 0, _workingCanvas.width*_scale, _workingCanvas.height*_scale);
}
같은 크기의 새 캔버스를 만들고 그 위에 이미지를 그린 다음 캔버스의 크기를 스칼라로 크기를 조정하면 어떻게됩니까? – Adam