在c#中将原始图像转换为位图
我的代码目前看起来像这样:
if (fe == "CR2") { Image img = null; byte[] ba = File.ReadAllBytes(open.FileName); using (Image raw = Image.FromStream(new MemoryStream(ba))) { img = raw; } Bitmap bm = new Bitmap(img); pictureBox1.Image = bm; statusl.Text = fe; }
当我打开RAW图像时程序停止,Visual Studio说:
参数无效:Image raw = Image.FromStream(new MemoryStream(ba))
请帮忙! 如何在PictureBox中显示RAW文件?
像这样创建位图:
Bitmap bmp = (Bitmap) Image.FromFile(open.FileName);
或不使用位图:
this.pictureBox1.Image = Image.FromFile(open.FileName);
示例WPF:
BitmapDecoder bmpDec = BitmapDecoder.Create(new Uri(origFile), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); BitmapEncoder bmpEnc = new BmpBitmapEncoder(); bmpEnc.Frames.Add(bmpDec.Frames[0]); Stream ms = new MemoryStream(); bmpEnc.Save(ms); Image srcImage = Bitmap.FromStream(ms);
您实际上是通过指定using (Image raw = Image.FromStream(new MemoryStream(ba)))
来处理Image,稍后将Disposed
的图像实例分配给picturebox
,这会导致此exception。 为了使你工作,你要么不处理或克隆图像。
Bitmap raw = Image.FromStream(new MemoryStream(ba) as Bitmap; pictureBox1.Image = raw;
或者只是克隆
using (Image raw = Image.FromStream(new MemoryStream(ba))) { img = raw.Clone() as Bitmap; }
以上两点都应该有效
你试试这段代码:
private static void SaveImageToRawFile(string strDeviceName, Byte[] Image, int nImageSize) { string strFileName = strDeviceName; strFileName += ".raw"; FileStream vFileStream = new FileStream(strFileName, FileMode.Create); BinaryWriter vBinaryWriter = new BinaryWriter(vFileStream); for (int vIndex = 0; vIndex < nImageSize; vIndex++) { vBinaryWriter.Write((byte)Image[vIndex]); } vBinaryWriter.Close(); vFileStream.Close(); } private static void LoadRawFile(string strDeviceName, out Byte[] Buffer) { FileStream vFileStream = new FileStream(strDeviceName, FileMode.Open); BinaryReader vBinaryReader = new BinaryReader(vFileStream); Buffer = new Byte[vFileStream.Length]; Buffer = vBinaryReader.ReadBytes(Convert.ToInt32(vFileStream.Length)); vBinaryReader.Close(); vFileStream.Close(); }