现在我正在尝试从jpg图像中获取图像类。 我已经尝试使用here链接的BitmapSource。
错误不是英文,但意思是"图像标题被破坏。所以,它是不可能解码的。"。 其他格式如gif,png,bmp都没有问题。 只有jpg格式才能解决这个问题。
<序列> Zip档案文件(jpg文件在此文件中。) - >解压缩库 - > MemoryStream(jpg文件) - > BitmapSource
imageSource.BeginInit();
imageSource.StreamSource = memoryStream;
imageSource.EndInit();
此代码出错。
我认为原因是内存流具有jpg的原始二进制,并且它不是Bitmap格式。因此,BitmapSource无法将此内存流数据识别为位图图像。
我该如何解决这个问题? 我的目标是输入:" ZIP文件(在jpg中)" - >输出:图像类。
谢谢!
<我的代码>
using (MemoryStream _reader = new MemoryStream())
{
reader.WriteEntryTo(_reader); // <- input jpg_data to _reader
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = _reader;
bitmap.EndInit();
bitmap.Freeze();
Image tmpImg = new Image();
tmpImg.Source = bitmap;
}
答案 0 :(得分:0)
写完后回滚流。虽然显然只有JpegBitmapDecoder受到源流Position
的影响,但通常应该对所有类型的位图流执行此操作。
var bitmap = new BitmapImage();
using (var stream = new MemoryStream())
{
reader.WriteEntryTo(stream);
stream.Position = 0; // here
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
}
var tmpImg = new Image { Source = bitmap };
如果您实际上并不关心您的图片来源是BitmapImage
还是BitmapFrame
,您可以将代码缩减为:
BitmapSource bitmap;
using (var stream = new MemoryStream())
{
reader.WriteEntryTo(stream);
stream.Position = 0;
bitmap = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
var tmpImg = new Image { Source = bitmap };