问题标签 [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.
c# - 即使使用 DIBv5 转换,C# 图像在剪贴板中加载时也会失去透明度
我正在尝试将图像文件加载到剪贴板,然后使用 Ctrl+V 将其粘贴到 Discord 中。可以将 PNG 粘贴到 Discord 并保留透明度,因为我可以右键单击以在 Mozilla 或 Chrome 上复制图像,然后按 Ctrl+V 将其粘贴到 Discord 客户端。查看剪贴板内容显示 Mozilla在复制图像后存储DeviceIndependantBitmap
和数据格式。Format17
因此,我调整了从剪贴板复制到剪贴板失去图像透明度的帖子中的功能,以将Image
对象转换为DIBv5
数据并将其加载到DeviceIndependantFormat
名称下的剪贴板中。
但是不支持透明度。然后将图像粘贴到 Discord 中时,所有透明区域都用黑色填充。这是用于测试在剪贴板中加载 PNG 的脚本。复制图像时,DIB 标头与 Mozilla 的 DIB 标头完全匹配(仅更改了宽度、高度和像素数信息):
- 原始图像文件:
- 运行程序后,使用 Ctrl+V 在 Discord 中粘贴的图像:
我在调试/逆向工程尝试期间尝试了以下操作:
- 从Mozilla复制图像(右键单击并复制),然后读取该
Format17
名称下存储在剪贴板中的数据,并将其保存到文件中,然后再次将文件内容加载到剪贴板中。如果以名称加载,则Format17
Ctrl+V 不会发生任何事情(Discord 不会检测到任何要粘贴的内容)。但是,如果在下面加载,DeviceIndependantBitmap
则图像会正确粘贴到 Discord 中(具有透明度)。 - 使用上述帖子中的相同代码以更简单的 DIB 格式加载图片,尽管它也提供黑色背景。
我读过的其他帖子:
- 如何将 CF_DIBV5 从剪贴板 (Format17) 转换为透明位图?
- 如何将剪贴板中的透明图像粘贴到 C# winforms 应用程序中?
- 如何仅使用直接 WinAPI 将与设备无关的位图放入 Windows 剪贴板?(没有 MFC 或其他包装器)
- Win32 剪贴板和 Alpha 通道图像
有谁知道为什么会发生这种情况以及如何解决它?谢谢。