我有一個簡單的畫布,帶有一個mouseover事件。當用戶移動鼠標時,我想在事件的x,y座標上繪製單個像素(將來它會比單個像素更復雜)。本質上它就像一個自定義光標。HTML5畫布 - 無法清除髒像素 - 視網膜相關
邏輯非常簡單,如下所示。奇怪的是,儘管我正在清理舊像素位置,但留下的像素殘留很小(因爲我發佈了這個問題,我發現它與Retina顯示有關)。我已經能夠解決這個問題了。而不是保存1px和恢復1px,我保存3px並恢復3px。但我不明白爲什麼我需要這樣做,並且在將來當我繪製更復雜的光標時,我希望髒像素處理更精確。
這裏有一個可運行的jsfiddle例如:http://jsfiddle.net/sbCq3/2/
// cleanup previously drawn pixel
ctx.putImageData(lastImageData, lastImageX, lastImageY);
// save the imageData currently at x,y
lastImageData = ctx.getImageData(x, y, 1, 1);
lastImageX = x;
lastImageY = y;
// draw the dot
var dotData = ctx.createImageData(1, 1);
...
ctx.putImageData(dotData, x, y);
我有點難倒。我想知道它是否與我的Retina顯示有關。如果我在5,5處繪製單個像素,它是圖像數據中的單個像素 - 但我可以使用DigitalColor Meter(內置縮放工具)進行縮放,並查看該單個像素是否被細分和消除鋸齒。而如果我在Windows機器上查看該像素,則它是一個不錯的像素。我還沒有測試過,看看這個問題是出現在Windows還是非視網膜機器上。 (我不是指正常的畫布反鋸齒問題)。
UPDATE:我只是測試這對我的同事非Retina的MacBook 17" 和它精美的作品完美所以這肯定似乎與Retina顯示屏
您的同事是否使用與您相同的瀏覽器? – Optox
是的相同的確切版本。 – nogridbag
Chrome 28.0.1500.95。老實說,我沒有在其他瀏覽器中測試過。 – nogridbag