javascript - HTML5 <canvas> 无抗锯齿

标签 javascript html canvas antialiasing

我使用fillRect(x, y, 9, 9)具有整数值并查看平滑矩形(见下文)。我尝试了以下方法,但没有成功:

this.ctx.webkitImageSmoothingEnabled = false;
this.ctx.imageSmoothingEnabled = false;

var iStrokeWidth = 1;  
var iTranslate = (iStrokeWidth % 2) / 2;
this.ctx.translate(iTranslate, iTranslate);

我想在蓝色 block 之间看到一条 1 像素的线,但我看到平滑的间隙:

aliased fills

最佳答案

只需在位置上添加 0.5 像素(或预平移半个像素):

fillRect(x + 0.5, y + 0.5, 9, 9);

这是有效的,因为由于某种原因, Canvas 坐标系定义了从像素中心开始的像素。当绘制的 Canvas 实际上必须对单个点进行子像素化时,会产生 4 个抗锯齿像素。通过添加 0.5,您可以将其从中心移动到像素的 Angular 落,以便它与屏幕的坐标系匹配,并且不必进行子像素化。

这些仅影响图像,而不影响形状:

this.ctx.webkitImageSmoothingEnabled = false;
this.ctx.imageSmoothingEnabled = false;

关于javascript - HTML5 <canvas> 无抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976031/

相关文章:

javascript - 在 JavaScript 中重新初始化 json 变量

html - 显示表格html困惑

php - 为什么这个 Canvas 不显示?

Javascript - OOP 引用循环

javascript - 如何从延迟对象访问返回值?

html - 从另一个页面单击单选按钮

javascript - HTML Canvas - 随着内容的增长自动调整大小

使用 Graphics 进行 WPF Canvas 绘制

javascript - NodeJS 使用 mock-fs 测试 writeFile

php - HTML 复选框字段被传递给 PHP 作为选中状态,即使它没有被选中