c# - 如何在不丢失 .NET 中的 alpha channel 的情况下从剪贴板中获取图像?

标签 c# .net image png clipboard

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

Image clipboardImage = Clipboard.GetImage();
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);

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

图像保存为 PNG,其中可以包含 alpha channel 。

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

谁能把我从痛苦中解救出来?

提前致谢!

更新:

// outputs FALSE
Debug.WriteLine(Image.IsAlphaPixelFormat(Clipboard.GetImage().PixelFormat));

以上内容表明,一旦从剪贴板中取出 alpha 数据,它就会丢失。也许我需要通过其他方式将其从剪贴板中取出?

最佳答案

不要调用 Clipboard.GetImage(),而是尝试调用 Clipboard.GetDataObject()

这将返回一个 IDataObject,您可以依次调用 dataObject.GetFormats() 来查询它。 GetFormats() 返回剪贴板对象支持的类型格式 - 可能支持更精确的格式,您可以使用它来提取数据。

关于c# - 如何在不丢失 .NET 中的 alpha channel 的情况下从剪贴板中获取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/998655/

相关文章:

c# - System.IO.FileNotFoundException : Could not load file or assembly System. Xml.Linq

c# - 是否可以简化此 Linq 查询语法?

c# - 抛出新异常的最佳实践

html - 在响应式环境中叠加两个图像

javascript - 创建一个非开发人员以后可以更改图像的 HTML/PHP 页面

C#:我可以将显式委托(delegate)强制转换为 Action 委托(delegate)吗?

c# - 将 Access 数据库表加载到数据表

javascript - .NET 正则表达式匹配来自任何语言的任何类型的字母

Java JPEG DCT系数在我修改后自行改变

c# - 非唯一枚举值