c# - 从剪贴板保存 PNG 时出现黑色图像

标签 c# wpf

我正在尝试保存已复制到剪贴板的 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 channel ?

谢谢

编辑:我应该提到,从 Internet Explorer 9 复制图像时会出现黑色图像。从 Chrome 或 Firefox 复制图像时效果很好。有任何解决 IE9 问题的方法吗?

最佳答案

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

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);
    }
}

关于c# - 从剪贴板保存 PNG 时出现黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769534/

相关文章:

WPF 用户控件内存泄漏

c# - 在 ICollectionView 中过滤对象的子项

c# - 无法识别 Serilog 的 AddSerilog

c# - .net 框架是否提供使用文件系统的异步方法?

c# - 带有滚动背景图像的 ListView

c# - 寻找替代太多属性(property)变更的方法

c# - 使用 MVVM 将 RichTextBox 的内容保存到文件

c# - 使用 MySql 参数在一个查询中插入多个

c# - DisplayFormat 与 CultureInfo DateTime

c# - ASP.NET MVC5 - 带有 Active Directory 用户的 DropDownList