4 votes

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 dit :

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

Aidez-nous ! Comment faire pour qu'un fichier RAW s'affiche dans une PictureBox ?

5voto

Martijn van Put Points 2882

Créez le bitmap comme ceci :

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

ou sans utiliser de 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);

3voto

Sriram Sakthivel Points 33463

Vous disposez en fait d'une image en spécifiant using (Image raw = Image.FromStream(new MemoryStream(ba))) en attribuant ensuite le Disposed instance d'image à picturebox ce qui conduit à cette exception. Pour que cela fonctionne, il faut soit ne pas disposer de l'image, soit la cloner.

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

Ou simplement Clone

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

Les deux options ci-dessus devraient fonctionner

1voto

MHAnbar Points 11

Vous essayez ce code :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X