如何在不丢失.NET中的alpha通道的情况下从剪贴板中获取图像?

Jaf*_*ake 8 .net c# clipboard png image

我正在尝试从剪贴板保存复制的图像,但它正在丢失其alpha通道:

Image clipboardImage = Clipboard.GetImage();
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);
Run Code Online (Sandbox Code Playgroud)

如果我从PhotoShop或IE/Firefox/Chrome复制32位图像并运行上面的代码,则输出会丢失其Alpha通道,而是在黑色背景下保存.

图像保存为PNG,可以包含Alpha通道.

正确的数据似乎在剪贴板中,因为粘贴到其他应用程序(例如PhotoShop)会保留alpha通道.

任何人都可以让我摆脱痛苦吗?

提前致谢!

更新:

// outputs FALSE
Debug.WriteLine(Image.IsAlphaPixelFormat(Clipboard.GetImage().PixelFormat));
Run Code Online (Sandbox Code Playgroud)

以上表明,一旦从剪贴板中取出,alpha数据就会丢失.也许我需要以其他方式将其从剪贴板中删除?

Kev*_*lin 7

不要打电话Clipboard.GetImage(),试着打电话Clipboard.GetDataObject()

这将返回一个IDataObject,您可以通过调用进行查询dataObject.GetFormats(). GetFormats()返回Clipboard对象支持的类型格式 - 可以使用更精确的格式来提取数据.

  • 这是最有可能的解决方案.剪贴板上的通用图像格式具有20年的向后兼容性.几乎可以肯定的是,当以CFBITMAP格式请求时,Windows故意将任何32位图像转换为24位. (3认同)