剪贴板的 C# 图像到 DIB 转换不适用于透明度

问题描述

我正在尝试使用 C# 将图像文件加载到 Windows 的剪贴板中,以便能够使用 Ctrl+V 将其粘贴到 Discord 中。我使用 Copying From and To Clipboard loses image transparency 中的脚本将图像文件转换为 DIB 格式并将其加载到剪贴板中。然而,透明度没有得到很好的处理,完全透明的区域用黑色填充。 这是一个例子:

  • 原始图像文件:

Original PNG image,with transparency correctly displayed

  • 从剪贴板以 DIB 格式在 Discord 中粘贴图像:

Displayed image in Discord,transparent regions filled with black color

可以将 PNG 粘贴到 Discord 中并保留透明度,因为我可以右键单击以在 Mozilla 或 Chrome 上复制图像,然后按 ctrl+v 将其粘贴到 Discord 客户端中。查看剪贴板内容显示 Mozilla 在复制图像后存储 DeviceIndependantBitmapFormat17 数据格式。

这是我的 CopyToClipboard 函数:

public static void CopyToClipboard(string imagePath)
{
    Clipboard.Clear();
            
    Bitmap bmp = new Bitmap(imagePath);
    SetClipboardImage(bmp,null,null);
}

其中 SetClipboardImage 函数是直接从上面提到的 post 复制而来的。将 biCompression 值设置为 0 并移除颜色遮罩以匹配 Mozilla 的 DIB 的标头会产生相同的结果。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...