- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
请看这个例子:http://codepen.io/anon/pen/QNGzBP
const canvas = document.getElementById('canvas')
const ctx = canvas.getContext('2d')
// set pixel at 0,0 to rgba(2, 0, 255, 0.2)
const imageData = ctx.getImageData(0, 0, 1, 1)
imageData.data[0] = 2
imageData.data[1] = 0
imageData.data[2] = 255
imageData.data[3] = 0.2 * 255 // 0.2 opacity
ctx.putImageData(imageData, 0, 0, 0, 0, 1, 1)
console.log('Setting pixel 0,0 to', {
r: imageData.data[0],
g: imageData.data[1],
b: imageData.data[2],
a: imageData.data[3] / 255
})
// retrieve pixel at 0,0
const newImageData = ctx.getImageData(0, 0, 1, 1)
console.log('Fetching pixel at 0,0', {
r: newImageData.data[0],
g: newImageData.data[1],
b: newImageData.data[2],
a: newImageData.data[3] / 255
})
以上代码修改 Canvas 上的单个像素,然后检索它,同时控制台记录该过程。当 alpha 低于 1 时, Canvas 似乎会改变 RGB 数据。
它似乎同时出现在 Chrome 和 Firefox 中。这只是一个浏览器错误吗?我正在用 Canvas 制作 PNG,并要求颜色 100% 准确。有什么解决方法吗?
编辑:
http://codepen.io/anon/pen/ZWLbKx
显示 alpha 如何改变 rgb 值的更多测试。
最佳答案
很抱歉让您失望,但 HTML5 Canvas 已被批准为“有损”:它使用 alpha channel 预乘。
来自 https://www.w3.org/TR/2dcontext/#dom-context-2d-getimagedata (参见第二个“注意:”框):
Due to the lossy nature of converting to and from premultiplied alpha color values, pixels that have just been set using
putImageData()
might be returned to an equivalentgetImageData()
as different values.
推荐阅读: How can I stop the alpha-premultiplication with canvas imageData?
看起来有点相似,但可能是关于一个完全不同的域:Invalid blending results across all browsers with HTML5 canvas
...有很多 JavaScript PNG 编码器/解码器。不幸的是,截至 2017 年,情况就是这样。
FWIW,我试过上下颠簸 r/g/b/a 值,以尝试让 Canvas 吐出我真正想要的值。 5 分钟的实验表明,它会根据 alpha 设置“跳跃”到您想要的特定像素值。
关于javascript - 当 alpha 小于 1 时,HTML Canvas 不准确地设置像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038679/
问题:如果联接表的属性大于/小于值,是否可以在散列条件下进行测试 例如:测试 Actor 年龄是否大于年龄变量: 是否可以写而不是 ARRAY CONDITION 的: ageVariable = 3
这个问题已经有答案了: How to check if a number is between two values? (12 个回答) 已关闭 6 年前。 我目前正在 Codecademy 上学习
我想知道是否有一种方法可以比较 arrayList 中的连续元素。我有这个 for (int j=0; j< Index.size(); j++) { if(Index.get(j) < Ind
我正在压缩一些代码,现在我有 4 种方法,它们几乎都做同样的事情,除了 for 循环的建模有点不同。我正在传递 int 的 up , down , right ,和left作为这个紧凑方法的参数,这与
SELECT DISTINCT s.sname, s.sid FROM student s, class c WHERE s.programme = 'CS' AND s.level = '2' AN
我正在尝试通过命令行读取文件名, 这是教授要我们输入的命令: java MultiBinaryClient xxxxxx.edu 6001 < files.txt 我正在尝试使用 args[3]获取文
在 C# 中,您可能会看到以下内容: [] 或类似的行(但没有大于/小于符号): [assembly: AssemblyTitle("MyProject")] 我知道第一个称为属性(它有 gt 和 l
我只是想知道大于/小于的结果是如何计算并返回给高级语言的。 我在这里寻找硬件门模型。 让我们用一个统一的例子来解释,比如说5 > 3。 最佳答案 它通常通过带有进位检测的减法来实现。 从门控的角度来看
这个问题在这里已经有了答案: strange output in comparison of float with float literal (8 个答案) 关闭 8 年前。 案例一 float
你到底如何检查一个数字属性是否小于 Apache Ant? 从我所看到的(我是 Ant 的新手)你只能做 ? 最佳答案 您可以使用 (见 http://ant.apa
在 C 中使用 float.h 我想知道如何找到最大的数字,如果我加到 1,答案将保持为 1。 即 1 + x = 1 如何找到 x? 最佳答案 如果你想要“小于 FLT_EPSILON 的最大数字”
我正在尝试查询节点统计信息端点(_nodes / stats)并收到此错误: {"error":{"root_cause":[{"type":"illegal_argument_exception",
有没有更快的方法来检查列表中的项目是否大于、小于或等于某个数字? 或者你只需要循环它?我只是好奇是否有为此预先构建的函数。 示例: 列表包含 5、5、10、15、15、20。 我想检查是否有多少个
因此,我必须编写一个代码,从用户那里获取 2 个日期(月/日/年),如果第一个日期小于第二个日期,则返回“true”。在任何其他情况下,日期将为“假”或“它们是相同的”。我被告知我不能要求用户执行指定
我有两个变量,如果它们的值彼此相差在 5 个数字以内,我想触发一些代码。不知道哪个变量具有更高的值,我可以这样做: if (var1 > var2) { if ((var1 - var2) < 5
我有一个函数,它接受一个对象并将其转换为字节数组: public static byte[] serialize(Object obj) throws IOException { try(By
下载大小已经低于 4MB 的应用程序是否也可以作为免安装应用程序未经修改地分发? 最佳答案 要将该应用程序作为免安装应用程序提供,仍需采取一些步骤。参见 http://g.co/instantapps
我有以下 SELECT 但无法正常工作: SELECT COUNT(userid) FROM login WHERE 17 YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS
我制作了一个脚本,其中 #hsz-wrap2 附加到最后一个可见的 div,当 div 数量低于或等于 16 在 #snapshot_vertical div 内。 但是,if 条件的工作方式我不明白
我在外部的一排内放置了一个 Logo 、一个搜索框和一个语言栏,并位于 Bootstrap 导航栏上方。这一行当然仍在主容器中,但它包含我提到的 3 个元素——我和我的客户认为这 3 个元素独立于导航
我是一名优秀的程序员,十分优秀!