HTML5画布-无法清除脏像素-视网膜相关

Nogridbag

我有一个带有mouseover事件的简单画布。当用户移动鼠标时,我想在事件的x,y坐标处绘制单个像素(将来它将比单个像素更复杂)。从本质上讲,它就像一个自定义光标。

逻辑非常简单,如下所示。奇怪的是,尽管我正在清理旧的像素位置,但仍有少量像素残留(因为我发布了这个问题,所以我发现它与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或非视网膜计算机上出现此问题。(我不是在指普通的画布抗锯齿问题)。


更新:我刚刚在我的同事们的非视网膜MacBook 17“上测试了它,它工作得非常好。因此,这显然与视网膜显示屏有关。

Optox

我不确定,但是我认为这可能与不同屏幕的分辨率有关。如果您曾经在智能手机上看过html5画布,而每张html5画布的分辨率都比显示器大得多,那么您会发现质量大大降低了,因为Web浏览器将显示的像素扩展了100px使用相同的物理尺寸,最终约为〜130px。我认为您的视网膜显示器也会发生同样的情况,因为它使用了疯狂的良好分辨率。基本上,不同的屏幕具有不同的像素大小比率。为了解决这个问题,我在代码中添加了以下内容。

var PIXEL_RATIO = (function() {
  var ctx = document.createElement("canvas").getContext("2d"),
      dpr = window.devicePixelRatio || 1,
      bsr = ctx.webkitBackingStorePixelRatio ||
            ctx.mozBackingStorePixelRatio ||
            ctx.msBackingStorePixelRatio ||
            ctx.oBackingStorePixelRatio ||
            ctx.backignStorePixelRatio || 1;

  return dpr / bsr;
  })();

现在,无论何时制作画布或绘制任何东西,都应将常量乘以变量PIXEL_RATIO。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HTML5画布像素处理

来自分类Dev

HTML5画布的线宽小于1像素

来自分类Dev

替代HTML5画布清除方法

来自分类Dev

替代HTML5画布清除方法

来自分类Dev

无法在html5画布上绘制

来自分类Dev

HTML5画布转换-监视像素到画布点

来自分类Dev

清除画布后未绘制图像(html5画布)

来自分类Dev

如何将像素转换为测量HTML5画布

来自分类Dev

为什么缩放后的HTML5画布上的“像素”奇怪地对齐?

来自分类Dev

在HTML5画布上绘制1像素线的完整解决方案

来自分类Dev

为什么我的代码没有清除HTML5画布?

来自分类Dev

为什么我的代码没有清除HTML5画布?

来自分类Dev

视网膜-设备像素比率与图像大小之间的相关性?

来自分类Dev

HTML5画布中无法解释的传播图片

来自分类Dev

Unicode字符无法在HTML5画布中正确呈现

来自分类Dev

无法在Phonegap中的HTML5画布上绘制图像

来自分类Dev

无法显示基于HTML5画布图块的地图

来自分类Dev

使用JavaScript无法绘制到HTML5画布的线条

来自分类Dev

视网膜显示的HTML大小

来自分类Dev

如何在没有像素模糊的情况下调整html5画布的大小

来自分类Dev

无法在Firefox中将SVG绘制到HTMl5画布(即使设置了高度和宽度)

来自分类Dev

视网膜的半像素边框半径

来自分类Dev

视网膜的半像素边框半径

来自分类Dev

图像资产目录无法识别xCode5中的视网膜4张照片

来自分类Dev

html5画布代码可在w3schools tryit编辑器或jsfiddle中使用,但另存为html文件时无法使用

来自分类Dev

禁用html5画布

来自分类Dev

了解HTML5画布

来自分类Dev

禁用html5画布

来自分类Dev

HTML5画布脉动