У меня есть следующий код, и я не вижу ничего плохого, никаких идей о том, что может быть проблемой?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(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
Сообщение = Указанный метод не поддерживается. Источник = PresentationCore
StackTrace: в System.Windows.Media.Imaging.BitmapEncoder.Save (поток Поток) в FileFormatters.Export.SaveImage (данные BitmapFrame, поток saveStream)
InnerException: нуль
страница MSDN говорит
NotSupportedException: значение Frames, которое передается в кодировщик равна нулю.
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"
Попытка немедленно загрузить растровое изображение с помощью MemoryStream 'вар ВМР = BitmapFrame.Create (MEM, BitmapCreat eOptions.None, BitmapCacheOption.OnLoad); 'Кроме того, не могли бы вы просто написать оригинал' image.Data' в архив? – Clemens
@ Clemens благодарит за вашу помощь, к сожалению, это было первое, что, как я думал, не имело никакого эффекта, так как для пропуска декодирования я боюсь, что в качестве следующей операции нужно нарисовать коллекцию штрихов сверху кадра и сохранить это как второе изображение – MikeT