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?
Avez-vous essayé cela?
pictureBox.Image = bmp;
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);
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.