web-dev-qa-db-fra.com

Comment mettre une image dans une zone d'image à partir de Bitmap

Est-il possible de charger une image de la mémoire (byte[] Ou stream ou Bitmap) sans l'enregistrer sur le disque?

Voici le code que j'utilise pour transformer le tableau byte[] En Bitmap:

unsafe
{
    fixed (byte* ptr = Misc.ConvertFromUInt32Array(image))
    {
        Bitmap bmp = new Bitmap(200, 64, 800, PixelFormat.Format32bppRgb, new IntPtr(ptr));
        bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
        bmp.MakeTransparent(Color.Black);
        bmp.Save("test.bmp");
    }
}

Au lieu d'utiliser Bmp.save(), puis-je mettre Bitmap dans la zone d'image de mon formulaire?

23
Ivan Prodanov

Avez-vous essayé cela?

pictureBox.Image = bmp;
54
ChrisF

J'ai eu un code ressemblant à la réponse acceptée qui a provoqué une fuite de mémoire. Le problème est que lorsque vous définissez l'image de la zone d'image sur le bitmap, vous faites toujours référence au bitmap, plutôt que de créer une copie. Si vous devez définir l'image plusieurs fois, vous devez vous assurer que vous supprimez tous les anciens bitmaps.

C'est pour tous ceux qui cherchent à cloner un bitmap vers une zone d'image. Essaye ça:

if (pictureBox.Image != null) pictureBox.Image.Dispose();
pictureBox.Image = myBitmap.Clone(
    new Rectangle(0, 0, myBitmap.Width, myBitmap.Height), 
    System.Drawing.Imaging.PixelFormat.DontCare);
4
JSideris

Si vous travaillez avec le langage de programmation C++, cela peut être fait comme ceci:

void backGroundImage()
{
    Image^ back = gcnew Bitmap("C:\\Users\\User\\Documents\\image.bmp");
    pictureBox1->BackGroundImage = back;
};

Ensuite, vous pouvez appeler backGroundImage lorsque vous devez charger un bitmap.

0
r.mirzojonov