Sonntag, Juli 5, 2020

How to save Graphics-Objekt als Bild in C#?

Habe ich panel und verschiedenen Steuerelementen auf. Ich würde gerne ein Bild von dieser Tafel in einer Datei, wie kann ich dies tun ?

Ineed, etwas zu tun, wie der screenshot, aber ich brauche nur Bild bestimmter Bereich in meiner Anwendung, und ich will dies tun Sie auf eine Schaltfläche, klicken Sie auf in meine app.

Beste Grüße, Primoz


BEARBEITEN:
Ziehe ich auch auf dieses panel mithilfe dieses Codes

            Graphics g = chartTemperature.CreateGraphics();    
            g.DrawLine(p, prevPoint, e.Location);
            prevPoint = e.Location;

Ich dann doch nicht bekommen, diese ins Bild. Warum, und wie man dieses Problem beheben ?


EDIT 2:

namespace Grafi
{
    public partial class Form1 : Form
    {

        bool isDrawing = false;
        Point prevPoint;

        public Form1()
        {
            InitializeComponent();
        }

        private void chartTemperature_MouseDown(object sender, MouseEventArgs e)
        {
            isDrawing = true;
            prevPoint = e.Location;
        }

        private void chartTemperature_MouseMove(object sender, MouseEventArgs e)
        {
            Pen p = new Pen(Color.Red, 2); 
            if (isDrawing)
            {
                Graphics g = chartTemperature.CreateGraphics();    
                g.DrawLine(p, prevPoint, e.Location);
                prevPoint = e.Location;

                numOfMouseEvents = 0;              
            }
            p.Dispose();
        }

        private void chartTemperature_MouseUp(object sender, MouseEventArgs e)
        {
            isDrawing = false;
        }
    }
} 

Dies ist mein code zum zeichnen einer benutzerdefinierten Linie auf einem Diagramm. Können Sie mir bitte helfen, es zu tun richtige Weg ?

InformationsquelleAutor Primoz | 2010-11-12

2 Kommentare

  1. 14

    Verwenden Sie das Steuerelement.DrawToBitmap () – Methode. Zum Beispiel:

        private void button1_Click(object sender, EventArgs e) {
            using (var bmp = new Bitmap(panel1.Width, panel1.Height)) {
                panel1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
                bmp.Save(@"c:\temp\test.png");
            }
        }
    • +1 schön, dass Sie mein problem gelöst auch.
    • Das funktioniert nicht komplett für mich. Hinzugefügt habe ich Probleme, dass ich in meine ursprüngliche Frage.
    • Sie sollten nicht zeichnen, wie dieser. Versuchen Sie es zum Beispiel, minimieren, wiederherstellen der Fenster. Die Linie ist Weg. Dasselbe wird passieren, wenn Sie verschieben Sie ein anderes Fenster über Ihnen auf XP. Verwenden Sie die Steuerung, das Paint-Ereignis statt.
    • Ich bearbeitet meine erste Frage, um meinen code zum zeichnen einer benutzerdefinierten Linie auf einem Diagramm. Können Sie mir bitte helfen, es zu tun richtige Weg ?
    • Starten Sie bitte eine neue Frage zu diesem.
    • Ich öffnete es. stackoverflow.com/questions/4164864/…
    • Ich akzeptiere es, denn es beantwortet meine erste Frage.

  2. 3

    In Reaktion auf deinen edit:

    Wenn Sie die Zeichnung auf der Tafel mit einem Graphics Objekt zurückgegeben von der CreateGraphics Methode, deine Grafiken sind nicht permanent. Alles, was Sie zeichnen auf, wird das Objekt gelöscht, das nächste mal, dass das Steuerelement neu gezeichnet wird. (Für weitere detaillierte Informationen zu diesem Thema finden Sie unter: http://www.bobpowell.net/picturebox.htm und http://www.bobpowell.net/creategraphics.htm)

    Wenn Sie die DrawToBitmap Methode wie vorgeschlagen durch Hans Passant die Antwort, das panel-Steuerelement wird immer neu gezeichnet, die die Ursache Ihrer Zeichnungen verloren.

    Stattdessen, wenn Sie möchten, dass Ihre Zeichnungen dauerhaft, müssen Sie behandeln die Farbe event von dem panel-Steuerelement. Dieses Ereignis wird jedes mal ausgelöst, wenn Sie, dass das Steuerelement neu gezeichnet werden muss, und liefert eine Instanz von PaintEventArgs enthält eine Graphics Objekt, das Sie zeichnen können dauerhaft auf der Oberfläche des Steuerelements in der gleichen Weise, dass Sie wurden mit der Graphics Objekt zurückgegeben von der CreateGraphics Methode.

    Sobald Sie korrigiert Ihre Zeichnung code, die Sie verwenden können, Hans-Lösung.

    • Ich bearbeitet meine erste Frage, um meinen code zum zeichnen einer benutzerdefinierten Linie auf einem Diagramm. Können Sie mir bitte helfen, es zu tun richtige Weg ?
    • Was muss ich in der paint-Ereignis

Kostenlose Online-Tests