当 alpha =0 时画布会损坏 RGB

2023-12-29

我正在使用 HTML 画布来投影图像。当我尝试操纵图像数据的 Alpha 通道时,我发现只要将其归零,像素中的其他值就会发生变化。即使设置为较低的数字,它们似乎也会发生变化。从控制台执行此操作

canvas=document.getElementById('canvasid')
ctx=canvas.getContext('2d')
mydata=ctx.getImageData(20,20,20,20)
for (var i=0;i<1600;i+=4){mydata.data[i+3]=0}
ctx.putImageData(mydata,20,20)
mydata=ctx.getImageData(20,20,20,20)
for (var i=0;i<1600;i+=4){mydata.data[i+3]=255}
ctx.putImageData(mydata,20,20)

结果是黑色方块,而不是恢复应为 RGB 值的图像。

Chrome 和 Safari 都会出现这种情况,其他的没测试过

关于我做错了什么的任何线索。


当涉及到 alpha 通道和画布时,webkit 浏览器(可能还有 Blink)存在几个问题。这里有一个相关问题 https://code.google.com/p/chromium/issues/detail?id=234014.

markE 的答案可能是实际发生的情况,但并不是真正发生的情况should发生。 Alpha 通道的全部要点是 RGB 值保持不变(以及避免手动颜色混合等)。

Webkit 浏览器需要预先乘以该值(在浏览器中合成时),但其结果似乎“泄漏”到画布的位图中,而这是不应该的。

您正确地期望在更改 Alpha 通道时这些值保持不变。这是一个错误,您应该将其报告给 Chromium 团队(edit: now 已经被报告了 https://bugs.chromium.org/p/chromium/issues/detail?id=637576).

可能的解决方法

我能即时想到的唯一解决方法是将原始图像数据保留为单独的缓冲区,并将数据从源缓冲区复制到目标缓冲区,同时更改 Alpha 通道。

当然,如果您需要同时更新 RGB/像素数据,您将回到之前的相同情况,除非您愿意仅更新屏幕外缓冲区的像素 (RGB) - 这可以使用32 位类型数组缓冲区屏蔽了 Alpha 通道(将会降低性能)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 alpha =0 时画布会损坏 RGB 的相关文章

  • CSS:响应式布局中的高度自动问题

    我在响应式布局中使用 jquery 延迟加载 并使用空白 gif 作为预览图像 为了使延迟加载工作 我必须通过属性设置图像的高度和宽度 预览图像未设置为正确的高度 因为 height auto 似乎是通过 src 而不是通过高度属性计算高度
  • 列表项的替代背景颜色

    我有一个列表 每个项目都是链接的 有没有办法可以替换每个项目的背景颜色 ul li a href link Link 1 a li li a href link Link 2 a li li a href link Link 3 a li
  • 在 Fabric.js 中进行裁剪的“toDataURL”函数中,Multiplier 属性无法正常工作

    我的原始尺寸canvas is 800X700 我在用clipTo要在画布的选定部分中工作 var rect new fabric Rect left 100 top 50 fill fff width 376 height 602 str
  • 图像未完整显示在身体背景上

    例子 http jsbin com opokev 20 http jsbin com opokev 20 完整图片 http i53 tinypic com 347a8uu jpg http i53 tinypic com 347a8uu
  • ActiveX 日历控件在 Windows 7 中不起作用

    我们有一个经典的 ASP 应用程序 它使用以下日历对象
  • 在 wkwebview 中启用摄像头和麦克风访问

    我有一个针对移动设备优化的网络应用程序 它利用getUserMedia访问网络摄像头和麦克风资源 我正在将这个应用程序包装在WKWebView因为我想提供原生应用程序体验 我知道 iOS 不允许通过浏览器访问相机 但是有什么方法可以使用本机
  • 内部样式表中的 HTML 注释标签[重复]

    这个问题在这里已经有答案了 可能的重复 注释掉 HTML 文档中的样式表以支持旧版浏览器 https stackoverflow com questions 6825773 commenting out stylesheets in htm
  • 如何在纯 HTML 页面中返回特定的 HTTP 状态代码

    Google 建议当网站暂时不可用时返回 503 HTTP 响应 我有一些纯 HTML 网站 如何在纯 HTML 网站中返回 503 状态 我使用的是带有 Apache 的 Linux 机器 您必须在服务器上而不是在 HTML 文件中设置状
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • 是否可以在 html 中将单选按钮标签助手值属性设置为“已选中”?

    我正在寻找一种方法来使用单选按钮标签帮助器上的值属性来通知按钮是否被选中 而不是使用单独的字段进行选择 我找到了 Shyju 的答案相关问题 https stackoverflow com questions 34570908 radio
  • 如何使 CSS 动画/过渡以固定速度而不是固定持续时间播放? [复制]

    这个问题在这里已经有答案了 我有一个 CSS 动画 可以使元素沿直线移动未定义的距离 据我所知 动画具有固定的持续时间 因此无论元素必须移动多远 动画始终需要相同的时间来运行 我该如何制作才能使动画没有固定的duration 但有固定的运动
  • AJAX 加载的图像在 Safari 中无法正确显示

    因此 我使用 AJAX 加载每个页面的内容并将其注入当前页面 在 Chrome Firefox Internet Explorer 上一切都运行良好 尽其所能 哈哈 并且除了两个奇怪的部分之外 内容在 Safari 上加载良好 通过 AJA
  • Bootstrap 3 如何在较小的视口中不堆叠导航对齐

    我有一个引导导航 我需要避免将其堆叠在较小的视口上 以便它保持水平并且不会堆叠 这是一个例子 HTML div class menuBar ul class nav nav justified li a href class menuIte
  • Firefox 中出现图像映射问题

    我的图像地图无法在 Firefox 中运行 但可以在 Chrome 和 Safari 中运行 我认为这与 div 内的一些标签有关 你们能帮帮我吗 因为我对此不太了解 div style font size 14px img src dat
  • HTML Canvas:旋转图像 3D 效果

    我怎样才能旋转图像 例如45度 并挤压图像 假设我有一个完美的方形图像 我可以将它旋转到我想要的任何角度 但我想让旋转后的正方形被压扁 使高度比宽度小 2 3 生成的图像将不是一个完美的旋转正方形 而是一个被压扁的正方形 你知道我怎样才能达
  • 为什么 HTML 5 没有内置可编辑组合框或本地菜单? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HTML 中的自定义自关闭/不配对标签?

    以下代码 jsfiddle http jsfiddle net CUZta var div document createElement div div innerHTML
  • IE7内容可编辑自动换行

    我有以下代码 div class editable This is test text This is test text This is test text This is test text This is test text Thih
  • 尝试为每一行编写测试用例

    已经编写了跳跃方法的测试用例 但当我看到代码覆盖率报告时 它不会进入onloadend方法seat onloadend 在 createSpyObj 中我调用了 loadend 但它仍然没有进入内部 你们能告诉我如何解决它吗 下面提供我的代
  • 容器中的等间距 div

    这是我的例子 http jsfiddle net rtCP3 62 http jsfiddle net rtCP3 62 我有 3 个 或更多 div 我想在一个容器中均匀分布 当将 Angular 与 ng repeat 一起使用时 样式

随机推荐

  • onLongPress 未按预期工作

    我有一个表面视图 使用以下代码在其上实现手势检测 surfaceview setOnTouchListener new OnSwipeTouchListener this public class OnSwipeTouchListener
  • 如果 div 为空,则忽略边距

    我有 2 个 DIV 彼此相邻水平对齐 并使用包装器居中 我使用 margin right 将 DIV2 与 DIV1 分开 DIV2 可能没有内容 如果 DIV2 没有内容 我希望忽略边距 而 DIV1 单独居中 这是我的CSS div1
  • 无法找到“org.springframework.mail.javamail.JavaMailSender”类型的 bean

    我在用spring boot 2 0 7 Release and spring boot starter mail 2 0 7 Release 我正在自动装配javaMailsender在尝试部署时 在 Windows 上工作正常的类内部U
  • 如何在 C#.NET 4.0 中编写 WMI 提供程序?

    任何人都可以帮助我使用 C net 4 0 编写电池的 WMI 提供程序吗 有一个旧的 C 示例here http www c sharpcorner com uploadfile falkor wmiproviderguide112620
  • Python 用户定义的数据类型

    我正在用 Python 编写一个 Rogue like 游戏 并定义我的Tile班级 瓷砖可以是块状的 墙壁的或地板的 我希望能够写一些类似的东西 self state Blocked 类似于如何使用布尔值 但具有三个值 有没有一种好方法可
  • 更改 Android 录音默认输入源

    我目前正在编写一个需要录制和实时处理音频数据的应用程序 为此 我使用 AudioRecord 类 这一切都很好 除了我的主要测试设备 Galaxy Nexus 上录制音频的默认设置是从后置扬声器录制 我假设大多数手机的默认录音源是背面或底部
  • GHC 中自动专业化的传递性

    From the docs http www haskell org ghc docs 7 6 3 html users guide pragmas html idp49866112对于 GHC 7 6 你 通常甚至一开始就不需要 SPEC
  • JQuery IE 生涩幻灯片动画

    我有以下代码来动画显示 隐藏 div headerClosed headerOpen live click function this next slideToggle slow 这将显示并隐藏具有以下标记的 div div class d
  • 登录失败。请检查您的网络连接并重试

    我正在尝试使用 Google Play 游戏服务制作简单的游戏 但无法登录 Google Play 游戏 我明白了error 登录失败 请检查您的网络连接 然后重试 我有 MainActivity 和三个片段 MainFragment Ga
  • 使用 5 个表生成查询

    我已经创建了我的表 我正在尝试创建一个查询 将已售表中的 sell quantity 和 on sale 表中的 sale price 相乘并相加 暂时将其称为 R1 将产品表中的 Retail price 和已售表中的 sell quan
  • 获取 Promise.race 中完成的 Promise

    上下文 我需要进行大量可并行的异步调用 想想大约 300 到 3000 个 ajax 调用 但是 我不想同时调用所有浏览器或服务器 从而给浏览器或服务器带来压力 我也不想按顺序运行它们 因为完成需要很长时间 我决定一次运行五个左右 并派生了
  • Windows Azure 服务总线队列重复检测如何工作?

    我知道您可以设置重复检测以在一段时间内使用天蓝色服务总线队列进行工作 但是 有谁知道这是否基于队列中的对象起作用 因此 如果我有一个 id 为 SO 1 的对象 该对象被放入队列并随后被消耗 重复检测是否仍然有效 我想我要问的是 是时间范围
  • “yield”在这个排列生成器中如何工作?

    def perm generator lst if len lst 1 yield lst else for i in range len lst for perm in perm generator lst i lst i 1 yield
  • 在 gdb 中显示解引用的 STL 迭代器

    我有一个映射元素的迭代器 我希望 gdb 显示该迭代器的 第一个 和 第二个 元素的值 例如 std map
  • 修复非线性最小二乘 GSL 中拟合函数的参数

    我正在编写一些代码 这些代码使用 GNU 科学库 GSL 1 的非线性最小二乘算法进行曲线拟合 我已经成功地获得了一个工作代码 该代码使用来自的 C 包装器从拟合分析中估计了正确的参数https github com Eleobert gs
  • 呼叫 IVR 时动词记录超时的问题

    我们正在尝试使用 Twilio 为这些 IVR 创建自动化测试框架 我们从 Twilio 向 IVR 发出出站呼叫 使用动词 Say Play 与 IVR 进行交互 并使用 Record 来捕获 IVR 所说的内容 然后我们将其转录并做出断
  • C# 二进制数据转换为字符串

    这是交易 我找到了一个源代码并对其进行了一些更改 以便我可以从 com6 上的接收器检索数据 我收到的数据是二进制的 我想要的是将其转换为字符串 以便我可以剪切字符串的一部分并单独解码它们 我怎样才能做到这一点 源代码如下 using Sy
  • 在 Android 上将 mp3 转换为 wav

    关于 wav 到 mp3 的反向转换似乎有很多问题 但没有一个问题是相反的 我的情况是我可以使用隐写术将数据嵌入到 wav 文件中 我可以将它们转换为 ogg 并返回 隐写术与格式无关 并且可以在格式转换后继续存在 我现在想做的是构建 Au
  • 如何加载libandroid_runtime

    我正在开发一个项目 该项目被编译成 JAR 然后使用 javaws 进行部署 在我的一门课程中 我需要加载设备上目录 system lib 中找到的 libandroid runtime so 我该怎么做呢 System load liba
  • 当 alpha =0 时画布会损坏 RGB

    我正在使用 HTML 画布来投影图像 当我尝试操纵图像数据的 Alpha 通道时 我发现只要将其归零 像素中的其他值就会发生变化 即使设置为较低的数字 它们似乎也会发生变化 从控制台执行此操作 canvas document getElem