web-dev-qa-db-fra.com

Enregistrement de System.Drawing.Graphics en png ou bmp

J'ai un objet graphique que j'ai dessiné à l'écran et je dois l'enregistrer dans un fichier png ou bmp. Les graphiques ne semblent pas supporter cela directement, mais cela doit être possible d'une manière ou d'une autre.

Quelles sont les étapes?

20
Old Man

Copiez-le dans un Bitmap, puis appelez la méthode Save du bitmap.

Notez que si vous littéralement dessinez à l'écran (en saisissant le contexte du périphérique de l'écran), la seule façon d'enregistrer ce que vous venez de dessiner à l'écran est d'inverser le processus en dessinant de l'écran à a Bitmap. C'est possible, mais il serait évidemment beaucoup plus facile de simplement dessiner directement sur un bitmap (en utilisant le même code que vous utilisez pour dessiner à l'écran).

8
MusiGenesis

Voici le code:

Bitmap bitmap = new Bitmap(Convert.ToInt32(1024), Convert.ToInt32(1024), System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);

// Add drawing commands here
g.Clear(Color.Green);

bitmap.Save(@"C:\Users\johndoe\test.png", ImageFormat.Png);

Si vos graphiques sont sur un formulaire, vous pouvez utiliser ceci:

private void DrawImagePointF(PaintEventArgs e)
{
   ... Above code goes here ...

   e.Graphics.DrawImage(bitmap, 0, 0);
}

De plus, pour enregistrer sur une page Web, vous pouvez utiliser ceci:

MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Png);
var pngData = memoryStream.ToArray();

<img src="data:image/png;base64,@(Convert.ToBase64String(pngData))"/>

Les objets graphiques sont une surface de dessin GDI +. Ils doivent avoir un contexte de périphérique attaché sur lequel s'appuyer, c'est-à-dire un formulaire ou une image.

23
Curtis Yallop

Essayez ça, ça marche bien pour moi ...

private void SaveControlImage(Control ctr)
{
    try
    {
        var imagePath = @"C:\Image.png";

        Image bmp = new Bitmap(ctr.Width, ctr.Height);
        var gg = Graphics.FromImage(bmp);
        var rect = ctr.RectangleToScreen(ctr.ClientRectangle);
        gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size);

        bmp.Save(imagePath);
        Process.Start(imagePath);

    }
    catch (Exception)
    {
        //
    }
}
5

Vous dessinez probablement sur une image ou sur un contrôle. Si sur l'image utiliser

    Image.Save("myfile.png",ImageFormat.Png)

Si vous dessinez sur le contrôle, utilisez Control.DrawToBitmap (), puis enregistrez l'image renvoyée comme ci-dessus.

Merci pour la correction - je ne savais pas que vous pouviez dessiner directement à l'écran.

1
filip-fku
Graphics graph = CreateGraphics();
Bitmap bmpPicture = new Bitmap("filename.bmp");

graph.DrawImage(bmpPicture, width, height);
1
Cobusve