从剪贴板保存PNG格式时出现黑色图像

4

我正在尝试保存从剪贴板复制的 PNG 图像,但它要么变成了纯黑色,要么在应该是透明的区域周围变成了黑色。

这是我用来捕获和保存图像的代码:

var clipboardImage = (InteropBitmap)Clipboard.GetImage();

Image.SaveImage(clipboardImage, Path.Combine(Config.App.ApplicationDataImagesPath, string.Format("{0}.{1}", imageId, "png")));

public static void SaveImage(BitmapSource bitmapImage, string filename)
{
    using (var fileStream = new FileStream(filename, FileMode.Create))
    {
        var pngBitmapEncoder = new PngBitmapEncoder();
        pngBitmapEncoder.Frames.Add(BitmapFrame.Create(bitmapImage));
        pngBitmapEncoder.Save(fileStream);
        fileStream.Close();
        fileStream.Dispose();
    }           
}

有没有人知道为什么它不能保留PNG图像的Alpha通道?

谢谢。

Dan

编辑:我应该提到,当从Internet Explorer 9复制图像时,黑色图像会出现。从Chrome或Firefox复制图像时完美运行。有没有IE9问题的解决方法?


你正在提取剪贴板上的图像,就好像它是一个位图(常规的.BMP),这种格式不支持像PNG那样的透明度。你需要将其提取为PNG以保留透明度。 - Cody Gray
你关闭(Close())和释放(Dispose())文件流是不必要的,因为它已经被“using”包装起来了...我不确定这样做甚至是否会有“危害性”... - Yahia
@Yahia,考虑到Closer()和Dipose()已被移除。我不知道为什么一开始要加它们。 - Daniel Clark
@Cody 有提取图像为PNG格式的示例吗? - Daniel Clark
谢谢!我今天会去看一下。第一个链接看起来很理想...我会告诉你进展如何的。再次感谢。 - Daniel Clark
显示剩余3条评论
1个回答

3

如果只是这样做会发生什么:

Clipboard.GetImage().Save ("XXX.png", System.Drawing.Imaging.ImageFormat.Png);

编辑 - 对于WPF,请尝试以下方法:

public static void SaveClipboardImageToFile(string filePath)
{
    var image = Clipboard.GetImage();
    using (var fileStream = new FileStream(filePath, FileMode.Create))
    {
        BitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(image));
        encoder.Save(fileStream);
    }
}

我假设 Clipboard.GetImage().Save(...) 仅适用于 Winform?在 WPF 中没有类似的函数,而且我真的不想引用任何 Winform 的调用。 - Daniel Clark
尝试了你的WPF代码,但仍然产生了一个纯黑色的图像输出。我应该提一下,我是从Internet Explorer 9中复制图像(例如:http://images.findicons.com/files/icons/1035/human_o2/128/orange_folder.png),但不知道这是否有所不同? - Daniel Clark
是的 - 看起来好像有所不同... 我用 Firefox 试了一下... 下载时它具有透明度... 当我将其复制到剪贴板时,就会失去透明度(即将其粘贴到 Photoshop 中)。 - Yahia
唉,我刚刚用 Chrome 试过了,它也显示出了透明度。非常奇怪。这是 IE9 图像处理的一个 bug 吗? - Daniel Clark
并不是真正的错误...当应用程序将某些东西复制到剪贴板时,它可以选择任何格式... Firefox和IE似乎在没有透明度的情况下复制到剪贴板... - Yahia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接