私は次のコードを持っていますが、何も問題がありません。問題が何であるかについてのアイデアはありますか?
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(mem, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
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
Message=指定されたメソッドはサポートされていません。ソース=PresentationCore
StackTrace: System.Windows.Media.Imaging.BitmapEncoder.Save(ストリーム ストリーム) で FileFormatters.Export.SaveImage(BitmapFrame データ、ストリーム saveStream) で
内部例外: null
MSDNページには
NotSupportedException : エンコーダーに渡される Frames 値が null です。
NotSupportedException : フレーム数がゼロ以下です。
ただし、フレーム数は 1 であり、データは null ではありません
詳細情報
arc declared as using (ZipArchive arc = new ZipArchive(stream, ZipArchiveMode.Create))
image.Data is byte[]
codex.FriendlyName = "PNG Decoder"
encoder.CodecInfo.FriendlyName = "PNG Encoder"