Laden...

WPF: Canvas als Grafikdatei speichern

Erstellt von Create vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.848 Views
Thema geschlossen
C
Create Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren
WPF: Canvas als Grafikdatei speichern

Hallo,

ich erzeuge mir mit folgendem Code ein Fenster indem ich mehrere Shapes (Rectangle,Ellipse,Line) einfüge:


            Fenster = new Window();
            Fenster.SizeToContent = SizeToContent.WidthAndHeight;

            Border rand = new Border();
            rand.BorderBrush = Brushes.Black;
            rand.BorderThickness = new Thickness(2);

            Canvas canvas = new Canvas();
            canvas.Background = Brushes.White;
            canvas.Width = 800;
            canvas.Height = 600;

            Rectangle rect = new Rectangle();
            rect.Width = 10;
            rect.Height = 10;
            rect.Stroke = Brushes.Green;
            rect.Fill = Brushes.Green;
            Canvas.SetTop(rect, 100.00);
            Canvas.SetLeft(rect, 100.00);
            ......(das gleiche für Ellipse/Line/etc)...

            canvas.Children.Add(rect);
            ....alle einfügen

            rand.Child = canvas;
            Fenster.Content = rand;
            Fenster.Show();       
               

Nun habe ich hier ein Button eingefügt, mit dem ich den Fensterinhalt als Grafik exportieren möchte.
Weiß jemand einen Rat oder einen Link?

5.658 Beiträge seit 2006
vor 10 Jahren

Hi Create,

was genau meinst du mit Grafikdatei? Du kannst die Canvas ganz einfach mit dem XamlSerializer als XAML-Datei speichern. Das können viele Grafikprogramme lesen. Falls du andere vektorbasierte Formate benötigst, kannst du das XAML selbst konvertieren oder dir dafür im Internet eine entsprechende Bibliothek suchen.

Falls du Bilddateien wie JPG oder PNG meinst, dann schau dir mal die RenderTargetBitmap-Klasse an.

Christian

Weeks of programming can save you hours of planning

C
Create Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren

Hallo Christian,

sorry das ich mich missverständlich ausgedrückt hatte. Ich meinte den Export als Bilddatei, also als PNG, JPEG, GIF.

Deine genannte Klasse hatte ich auch bereits gefunden. So war mein Ansatz:


Image myImage = new Image();            
            try
            {
                RenderTargetBitmap render = new RenderTargetBitmap((int)canvas.Width, (int)canvas.Height, 96d, 96d, PixelFormats.Default);
                canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
                canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));
                render.Render(canvas);
                myImage.Source = render;
            }
            catch (NullReferenceException)
            {
                MessageBox.Show("Fehler");
            } 

Es wird auch die Exception ausgeworfen.

5.658 Beiträge seit 2006
vor 10 Jahren

Weeks of programming can save you hours of planning

C
Create Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren

Ich weiß, dass sicherlich jetzt eine "lernedieGrundlagen-Antwort" kommt. Aber ich finde gerade den Fehler nicht.
Im Canvas sind Elemente enthalten und werden mit show() auch angezeigt.

5.658 Beiträge seit 2006
vor 10 Jahren

Ich weiß, dass sicherlich jetzt eine "lernedieGrundlagen-Antwort" kommt. Aber ich finde gerade den Fehler nicht.

Kennst du schon Breakpoints und Einzelschritt-Debugging? Wenn nicht: Bitte lerne die Grundlagen. Ansonsten: Ausprobieren.

Weeks of programming can save you hours of planning

Hinweis von herbivore vor 10 Jahren

Wenn es wirklich an der NullReferenceException liegt und es klingt eindeutig so, dann folge bitte wirklich der FAQ. Und ja, bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

Thema geschlossen