2016-04-13 13 views
0

Ich habe ein DVC-Diagramm mit Daten angezeigt. Ich habe eine Schaltfläche erstellt, um das Diagramm zu exportieren. HierPngBitmapEncoder Erstellen einer "leeren" Datei

ist der Code:

private void btnExptGraph_Click(object sender, RoutedEventArgs e) 
{ 
    RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)mcChart.ActualWidth, (int)mcChart.ActualHeight,96d, 96d, PixelFormats.Pbgra32); 
    renderBitmap.Render(mcChart); 

    Console.WriteLine(renderBitmap.ToString()); 

    //JpegBitmapEncoder encode = new JpegBitmapEncoder(); 
    PngBitmapEncoder encode = new PngBitmapEncoder(); 
    encode.Frames.Add(BitmapFrame.Create(renderBitmap)); 

    string filename = "test.bmp"; 

    FileStream fout = new FileStream(filename, FileMode.Create); 

    encode.Save(fout); 

    MessageBox.Show("File Saved Successfully"); 
    fout.Close(); 
} 

Also mein Problem ist, dass diese korrekt ausgeführt, mit der Ausnahme, dass meine Datei im Grunde leer ist. Ich habe nur eine Datei von 1 KB Größe und keine Grafik.

Ich habe die MSDN-Dokumentation und andere Stack-Überlauf-Beispiele angeschaut. Alle folgen dieser Form und die Leute behaupten, dass es funktioniert. Ich habe mit einem Debugger ausgeführt und das renderBitmap-Objekt erhält die korrekten Werte für Höhe und Gewicht in allen erforderlichen Eigenschaften. Irgendwelche Ideen?

+0

Nur um klarzustellen, wird JpegBitmapEncoder auch nicht das gewünschte Ergebnis produzieren? – Clemens

+0

Sind 'mcChart.ActualWidth' und' mcChart.ActualHeight' größer als '0'? Ihr Diagrammsteuerelement muss entweder auf dem Bildschirm sichtbar sein, um es in eine 'RenderTargetBitmap' rendern zu können, oder Sie müssen' Measure() 'und' Arrange() 'darauf aufrufen. – bitbonk

+0

Sie haben Recht, JpegBitmapEncoder liefert nicht das gewünschte Ergebnis. Ich bekomme eine Datei von 2KB davon, aber ich glaube, das liegt einfach daran, dass JPEG-Dateien sowieso größer sind. Und ja mcChart.ActualWidth und mcChart.actualHeight sind größer als 0. Sie sind etwa 200 und 300 jeweils. Wenn ich auf dem Bildschirm sichtbar bin, nehme ich an, du meinst, dass ich die Grafik sehen kann? Wenn ja, ja. – SDSMTKyzer

Antwort

0

Mein Freund nahm einen Blick auf sie und das war die Lösung, die wir mit kam und funktioniert:

 Size size = new Size(mcChart.ActualWidth, mcChart.ActualHeight); 
     if (size.IsEmpty) 
      return; 

     size.Height *= 2; 
     size.Width *= 2; 

     RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32); 

     DrawingVisual drawingvisual = new DrawingVisual(); 
     using (DrawingContext context = drawingvisual.RenderOpen()) 
     { 
      context.DrawRectangle(new VisualBrush(mcChart), null, new Rect(new Point(), size)); 
      context.Close(); 
     } 
     result.Render(drawingvisual); 

     string filename = "test.png"; 
     FileStream fout = new FileStream(filename, FileMode.Create); 

     PngBitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(result)); 

     encoder.Save(fout); 

     fout.Close(); 
     MessageBox.Show("Done"); 
Verwandte Themen