Il semble y avoir beaucoup de questions sur l'image, mais je n'en ai trouvé aucune qui permette de changer le contenu d'une image en bitmap qui n'était pas simplement chargé à partir d'un fichier.Comment puis-je charger un bitmap généré dans un PictureBox?
Mon application prend un tableau d'octets et génère un bitmap à partir d'eux. Je veux vraiment éviter d'écrire dans un fichier en tant qu'étape de traitement intermédiaire. Comme il s'agit d'un tableau d'octets, et non de mots de 2 octets, j'ai dû créer une image bitmap indexée avec une palette d'échelle de gris. J'ai ensuite converti le bitmap indexé à un bitmap normal (24 bit bit).
C'est le code qui provoque une erreur pour moi:
pictureBox1.Image = (System.Drawing.Image)bmp2;
Quand je considère la forme (le picturebox essaie de tirer), le fil arrêtera simplement l'exécution avec un message: « paramètre non valide at System.Drawing.Image.get_RawFormat() "
Qu'est-ce que je fais mal? Comment puis-je créer un bitmap sécurisé pour la zone d'image?
C'est ce qui crée "BMP2":
//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);
//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;
//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();
Si je bmp1.Save (@ "testfile.bmp") Je reçois un bitmap parfaitement acceptable qui semble être sans anomalie. Pourquoi ne puis-je pas utiliser mon bitmap comme ma zone d'image. Image? Y a-t-il d'autres paramètres de l'image que je dois modifier avant de charger le nouveau bitmap dans celui-ci?
Le GC devrait prendre soin de la mémoire. – SLaks
@ SLaks: Le GC s'occupera de la mémoire, mais ne libèrera pas les ressources natives utilisées par l'objet Bitmap. Il y a une raison pour l'interface IDisposable, utilisez-la. –
@EdSwangren: ** Mauvais **. Les objets 'IDisposable' qui possèdent des ressources natives disposeront les ressources natives dans le finaliseur. Voir le motif Dispose. – SLaks