BitmapEncoder保存不受支持

时间:2016-08-16 10:24:37

标签: c# wpf ziparchive bitmapencoder

我有以下代码,我看不出有什么问题,关于问题可能是什么想法?

private static string SaveBaseImage( ZipArchive arc, DBImage image, int imageIndex )
{
    using (var mem = new MemoryStream(image.Data))
    {
        var bmp = BitmapFrame.Create(mem);
        //var bmp = BitmapFrame.Create(m‌​em, BitmapCreateOptions.‌​None, BitmapCacheOption.On‌​Load);
        var codex = bmp.Decoder.CodecInfo;

        var filename = $"{imageIndex}{codex.FileExtensions}";
        var imagezip = arc.CreateEntry(filename,CompressionLevel.Optimal));
        using (var imagestream = imagezip.Open())
        {
            SaveImage( bmp, imagestream);
        }
        return filename;
    }
}

private static void SaveImage(BitmapFrame data, Stream saveStream)
{
    var codex = data.Decoder.CodecInfo;
    var encoder = BitmapEncoder.Create(codex.ContainerFormat);
    encoder.Frames.Add(data);
    encoder.Save(saveStream);
}

当我跑它时抛出

  

发生了System.NotSupportedException HResult = -2146233067

     

消息=不支持指定的方法。来源= PresentationCore

     

堆栈跟踪:          在System.Windows.Media.Imaging.BitmapEncoder.Save(Stream stream)          在FileFormatters.Export.SaveImage(BitmapFrame数据,Stream saveStream)

     

InnerException:null

MSDN页面说

  

NotSupportedException:传递给编码器的Frames值为null。

     

NotSupportedException:帧数小于或等于零。

但帧数为1且数据不为空

进一步信息

arc declared as using (ZipArchive arc = new ZipArchive(stream, ZipArchiveMode.Create))
image.Data is byte[]
codex.FriendlyName = "PNG Decoder"
encoder.CodecInfo.FriendlyName = "PNG Encoder"

0 个答案:

没有答案