[英]Converting a JPEG image to a byte array - COM exception
使用C#,我正在尝试从磁盘加载JPEG文件并将其转换为字节数组。 到目前为止,我有这个代码:
static void Main(string[] args)
{
System.Windows.Media.Imaging.BitmapFrame bitmapFrame;
using (var fs = new System.IO.FileStream(@"C:\Lenna.jpg", FileMode.Open))
{
bitmapFrame = BitmapFrame.Create(fs);
}
System.Windows.Media.Imaging.BitmapEncoder encoder =
new System.Windows.Media.Imaging.JpegBitmapEncoder();
encoder.Frames.Add(bitmapFrame);
byte[] myBytes;
using (var memoryStream = new System.IO.MemoryStream())
{
encoder.Save(memoryStream); // Line ARGH
// mission accomplished if myBytes is populated
myBytes = memoryStream.ToArray();
}
}
但是,执行ARGH
行给我的信息是:
COMException未处理。 句柄无效。 (HRESULT异常:0x80070006(E_HANDLE))
我不认为文件Lenna.jpg
有什么特别之处 - 我是从http://computervision.wikia.com/wiki/File:Lenna.jpg下载的。 你能说出上面的代码有什么问题吗?
查看本文中的示例: http : //www.codeproject.com/KB/recipes/ImageConverter.aspx
最好使用System.Drawing
类
Image img = Image.FromFile(@"C:\Lenna.jpg");
byte[] arr;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
arr = ms.ToArray();
}
其他建议:
byte[] image = System.IO.File.ReadAllBytes ( Server.MapPath ( "noimage.png" ) );
应该不仅适用于图像。
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
发生此错误的原因是您使用的BitmapFrame.Create()方法默认为OnDemand加载。 在调用encoder.Save之前,BitmapFrame不会尝试读取与之关联的流,此时流已经被释放。
您可以将整个函数包装在using {}块中,也可以使用替代的BitmapFrame.Create(),例如:
BitmapFrame.Create(fs, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.