问题标签 [dib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
169 浏览

c# - 即使使用 DIBv5 转换,C# 图像在剪贴板中加载时也会失去透明度

我正在尝试将图像文件加载到剪贴板,然后使用 Ctrl+V 将其粘贴到 Discord 中。可以将 PNG 粘贴到 Discord 并保留透明度,因为我可以右键单击以在 Mozilla 或 Chrome 上复制图像,然后按 Ctrl+V 将其粘贴到 Discord 客户端。查看剪贴板内容显示 Mozilla在复制图像后存储DeviceIndependantBitmap和数据格式。Format17因此,我调整了从剪贴板复制到剪贴板失去图像透明度的帖子中的功能,以将Image对象转换为DIBv5数据并将其加载到DeviceIndependantFormat名称下的剪贴板中。

但是不支持透明度。然后将图像粘贴到 Discord 中时,所有透明区域都用黑色填充。这是用于测试在剪贴板中加载 PNG 的脚本。复制图像时,DIB 标头与 Mozilla 的 DIB 标头完全匹配(仅更改了宽度、高度和像素数信息):

  • 原始图像文件:

原始PNG图像,具有透明度。

  • 运行程序后,使用 Ctrl+V 在 Discord 中粘贴的图像:

将结果粘贴到 Discord 中。 透明区域用黑色填充。

我在调试/逆向工程尝试期间尝试了以下操作:

  • 从Mozilla复制图像(右键单击并复制),然后读取该Format17名称下存储在剪贴板中的数据,并将其保存到文件中,然后再次将文件内容加载到剪贴板中。如果以名称加载,则Format17Ctrl+V 不会发生任何事情(Discord 不会检测到任何要粘贴的内容)。但是,如果在下面加载,DeviceIndependantBitmap则图像会正确粘贴到 Discord 中(具有透明度)。
  • 使用上述帖子中的相同代码以更简单的 DIB 格式加载图片,尽管它也提供黑色背景。

我读过的其他帖子:

有谁知道为什么会发生这种情况以及如何解决它?谢谢。