2017-03-08 6 views
1

Es wird von einem Koordinatensystem mit den beiden unten aufgeführten Codesnippets erstellt. Leider speichert das zweite Code-Snippet das Bild auf dem Desktop. Ich möchte das "Bild" zurückgeben lassen. Wie kann ich das Bild des Koordinatensystems zurückgeben? (Ich habe eine Methode, die einen Rückgabewert als Bild hat)Wie kann ich das Bild zurückgeben?

Am Ende soll es preview = image;

So sein, dass aus dem Koordinatensystem ein „Bild“ und nicht auf den Desktop gespeichert ist, aber ich kann Gib es zurück.

var stream = new MemoryStream(); 
var pngExporter = new PngExporter { Width = 600, Height = 400, Background = OxyColors.White }; 
pngExporter.Export(plotModel, stream); 

preview = stream; //Does not work unfortunately 

var pngExporter = new PngExporter { Width = 350, Height = 350, Background = OxyColors.White }; 
pngExporter.ExportToFile(plotModel, @"C:\Users\user\Desktop\test.png"); 

public bool createPreview(out string errorMessage, out System.Drawing.Image preview, int pWidth, int pHeight, int pMargin) 
{ 
    errorMessage = null; 
    preview = null; 
    bool folded = false; 
    try 
    { 

    PlotModel plotModel = new PlotModel { Title = "Vorschaukomponente" }; 

    plotModel.Axes.Add(new OxyPlot.Axes.LinearAxis { Position = OxyPlot.Axes.AxisPosition.Bottom, MinimumPadding = 0.1, MaximumPadding = 0.1 }); 
    plotModel.Axes.Add(new OxyPlot.Axes.LinearAxis { Position = OxyPlot.Axes.AxisPosition.Left, MinimumPadding = 0.1, MaximumPadding = 0.1 }); 
    var series1 = new OxyPlot.Series.LineSeries 
    { 
     LineStyle = LineStyle.None, 
     MarkerType = MarkerType.Circle, 
     MarkerSize = 2, 
     MarkerFill = OxyColors.Transparent, 
     MarkerStroke = OxyColors.Black, 
     MarkerStrokeThickness = 1 
    }; 

    if (pointX.Count == pointY.Count) 
    { 
     for (int i = 0; i < pointX.Count; i++) 
     { 
     for (int g = i; g < pointY.Count; g++) 
     { 
      series1.Points.Add(new DataPoint(pointX[i], pointY[g])); 
      Console.WriteLine(i+1 + " | "+ pointX[i].ToString() + "/" + pointY[g]); 
      break; 
     } 
     } 
     series1.Smooth = true; 
     plotModel.Series.Add(series1); 
     try 
     { 
     var stream = new MemoryStream(); 
     var pngExporter = new PngExporter { Width = 600, Height = 400, Background = OxyColors.White }; 
     pngExporter.Export(plotModel, stream); 

     preview = stream; 
     // var pngExporter = new PngExporter { Width = 350, Height = 350, Background = OxyColors.White }; 
     // pngExporter.ExportToFile(plotModel, @"C:\Users\user\Desktop\test.png"); 
     folded = true; 
     } 
     catch (Exception exc) 
     { 
     System.Diagnostics.Debug.WriteLine(exc.Message); 
     errorMessage = "Es konnt kein Bild erstellt werden."; 
     folded = false; 
     } 
    } 
    else 
    { 
     errorMessage = "Es ist nicht die gleiche Anzahl von xen und yen vorhanden."; 
     folded = false; 
    } 
    } 
    catch (Exception) 
    { 
    errorMessage= "Es trat ein unerwarteter Fehler auf"; 
    folded = false; 
    } 
    return folded; 
} 

Antwort

3

Zunächst einmal wollen, schlage ich vor, Sie System.Windows.Media.Imaging.BitmapImage zu verwenden, anstatt System.Drawing.Image, da Sie in der WPF-Welt sind.

Nachdem Sie geändert, dass Sie leicht

preview.BeginInit(); 
preview.StreamSource = stream; 
preview.EndInit(); 

nach dem PngExporter seine Arbeit geleistet hat schreiben können.

Leider kann ich es nicht testen, da ich Ihre pointX und pointY - Sammlungen nicht habe.

Lassen Sie mich wissen, ob das

0

Sieht aus wie Sie Image.FromStream(stream)

+0

hilft _Können nicht "System.Drawing.Image" konvertieren "System.Uri" ._ 'System.Drawing.Image sa; BitmapEncoder-Encoder = neuer PngBitmapEncoder(); Encoder.Frames.Add (BitmapFrame.Create (sa)); Encoder.Save (fileStream); ' Ist jetzt in MainWindow, was ist falsch? – GabelUndMesser

+0

Das ist eine ganz andere Frage. Zu wenig Informationen zu beantworten, bitte stellen Sie eine neue Frage. – jeroenh

+0

Leider kann ich dann Ihren Lösungsansatz nicht testen, aber danach werde ich eine neue Frage stellen. Danke für deine Antwort. – GabelUndMesser

Verwandte Themen