캔버스의 크기를 축소 한 후 context.getImageData() 문제가 있습니다. 캔버스가 HTML 페이지에 추가되었습니다. HTML5 canvas 이미지의 확대/축소 context.getImageData 버튼
<canvas id="canvas" width="960" height="620"></canvas>
버튼과 같은 캔버스에 그린 그림이 있습니다.
var mx = (e) ? (e.offsetX || e.layerX) : 0;
var my = (e) ? (e.offsetY || e.layerY) : 0;
var cx = mx - (btn.x * this.ratio - 2;
var cy = my - btn.y * this.ratio - 2;
var pixels = btn.getContext().getImageData(cx, cy, 1, 1);
for (var j : number = 3; j < pixels.data.length; j += 4)
{
if((pixels.data[j])!=0 && e)
{
console.log('mouse over');
}
}
버튼이 큰 이미지에서 슬라이스 사전이 렌더링 :
var btn = createCanvas("img.png", 0, 0, 100, 100);
function createCanvas(img, sx , sy , w , h)
{
var canvas = document.createElement("canvas");
canvas.width = w;
canvas.height = h;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, sx, sy, w, h, 0, 0, w, h);
return canvas;
}
그 슬라이스 버튼/이미지는 주 캔버스에 추가 된 후 나는 마우스가 버튼 또는하지를 통해 있는지 알고 알파 채널을 테스트입니다.
this.context.drawImage(btn, 0,0, btn.width, btn.height, 100, 100, btn.width, btn.height);
전체 캔버스의 크기를 조정하기 전에는 제대로 작동합니다.
function scale() {
var scale = {};
scale.x = window.innerWidth/this.canvas.width;
scale.y = window.innerHeight/this.canvas.height;
var ratio = scale.x <= scale.y ? scale.x : scale.y;
}
캔버스의 크기를 줄인 후에는 단추의 맞음/겹치기 영역이 단추/이미지보다 큽니다. 그것은 크기가 조정되지 않았으며 원래의 너비와 높이를가집니다. 그러나 그래픽은 캔버스 크기에 따라 조정됩니다. 비율에 너비와 높이를 곱하려고 시도했지만 버튼의 이미지는 확대/축소되지만 마우스가 반응하는 영역은 버튼보다 여전히 크다. 문제를 해결하기 위해 코드에서 무엇을 변경해야합니까?
p.s. 나는 내 영어를 사과한다. :)
편집
나는 캔버스
window.addEventListener('resize', resize, false);
window.addEventListener('orientationchange', resize, false);
var canvas = $('#canvas');
var ratio = 1;
var originalCanvasW = 800;
var originalCanvasH = 600
function resize(e)
{
var scale = {x: 1, y: 1};
var s : string = '';
scale.x = window.innerWidth/canvas.width;
scale.y = window.innerHeight/canvas.height;
ratio = scale.x <= scale.y ? scale.x : scale.y;
ratio = (ratio > 1) ? 1 : ratio;
canvas.css('width',originalCanvasW*ratio);
canvas.css('height',originalCanvasH*ratio);
}
스케일링을 통해 달성하고자하는 것이 정확히 무엇인지는 모르지만 수동으로 스케일링하는 대신 ctx.scale (x, y)를 사용하여 전체 캔버스 좌표계의 크기를 조절하는 방법을 고려해 보았습니까? –
나는 적절한 hitArea와 함께 캔버스에 단추를 넣으려고합니다.그래서 캔버스의 크기를 줄이면 버튼 크기도 줄어들지 만 마우스가 이벤트를 잡는 버튼 영역은 크기가 조절되지 않습니다. 원본 캔버스의 크기가 조정되었으므로 원본 캔버스의 크기가 조정되지 않은 것처럼 보입니다. 예, ctx.scale (비율, 비율)을 시도했습니다. 원본 및/또는 주 캔버스에 있지만 문제를 해결하지는 않습니다. – proti
문제를 시각화하기 위해 이미지를 첨부하고 있습니다. http://i.stack.imgur.com/nFpqB.gif – proti