HTML5 Canvas - alpha 值较低的 strip ?

标签 html canvas drawing gradient html5-canvas

简介

我目前正在开发一个类似于 MugTug 的小型绘图应用程序 Sketchpad 。不过,有一个非常烦人的问题我还没有解决。

绘图算法

我的基本绘制算法与 MugTug 使用的算法类似。基本上它只是在用户绘图时使用drawImage 来标记图像。有一个严重的障碍。由于 alpha 较低,算法开始失败。

您可以通过以下方式设置画笔设置,在 MugTug 工具中轻松看到这一点:直径 -> 100,硬度 -> 1,流量 -> 100,不透明度 -> 2(1 太小!应用程序中的错误?)。

有两个主要问题: 1. 可见 strip 。 2. 颜色偏移(尝试不同的颜色来看看它是如何工作的......)

问题

该问题是否与颜色精度有关?在我看来,Canvas API 使用 8 位 channel (即 0-255)处理颜色。有什么办法可以绕过这个限制吗?如果可能的话,我更愿意使用纯浮点颜色 (0.0-1.0)。

欢迎任何有关如何处理此问题的想法。如果颜色确实仅限于 8 位 channel ,我想我运气不好......

最佳答案

这个问题似乎完全是由于颜色精度造成的。我认为大多数 Canvas API 实现都使用 8 位 RGBA channel 。 1% 或 2% 的不透明度意味着您在图像上应用了非常少量的颜色,只有大约 2-5 级的差异 - 因此即使在多次重复应用画笔之后,您使用的任何颜色最终都会被量化为较小的数字。

您可以制作自己的浮点 Canvas ,并在每次更改后将其复制到普通 Canvas 中。这将使大多数操作完全察觉不到该问题。您必须实现自己的绘图操作(如果您只使用drawImage,这还不算太糟糕),并且它们可能比 Canvas 操作慢。

关于HTML5 Canvas - alpha 值较低的 strip ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781808/

相关文章:

php - 使用 PHP 显示数据库中的记录

html - Bootstrap 中固定位置警报的大小

javascript - 无法将 Canvas 尺寸设为 1920x1080

javascript - 停止 HighCharts 在悬停时增加线宽

css - Div 在小屏幕上重叠

php - 将 Canvas 和表单发送到服务器以自定义名称保存图像

javascript - 在javascript中定向后 Canvas 将图像裁剪为正方形

java - 为什么没有为我设置 OnTouchListener?

c# - 全屏覆盖桌面

android - 如何在表面上绘制平滑的运动