Convertir des images brutes en bitmap en c #

Mon code ressemble actuellement à ceci:

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; } 

Lorsque j’ouvre une image RAW, le programme s’arrête et Visual Studio indique:

Le paramètre n’est pas valide: Image brute = Image.FromStream (new MemoryStream (ba))

S’il vous plaît aider! Comment puis-je obtenir un fichier RAW à afficher dans un PictureBox?

Créez le bitmap comme ceci:

 Bitmap bmp = (Bitmap) Image.FromFile(open.FileName); 

ou sans utiliser bitmap:

  this.pictureBox1.Image = Image.FromFile(open.FileName); 

Exemple 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); 

En réalité, vous supprimez une image en spécifiant l’ using (Image raw = Image.FromStream(new MemoryStream(ba))) affectant ultérieurement l’instance Disposed de l’image à picturebox qui entraîne cette exception. Pour que votre travail fonctionne, vous ne devez ni supprimer, ni cloner l’image.

 Bitmap raw = Image.FromStream(new MemoryStream(ba) as Bitmap; pictureBox1.Image = raw; 

Ou simplement cloner

 using (Image raw = Image.FromStream(new MemoryStream(ba))) { img = raw.Clone() as Bitmap; } 

Les deux éléments ci-dessus devraient fonctionner

vous essayez ce code:

 private static void SaveImageToRawFile(ssortingng strDeviceName, Byte[] Image, int nImageSize) { ssortingng 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(); }