2010-01-04 14 views
15

Ich lerne C#, während ich ein Programm schreibe, das mit einem Spektrometer verbunden ist. Ich habe herausgefunden, wie man ein Spektrum vom Spektrometer bekommt und es auf einer MS-Karte abbildet.Wie kopiere ich ein Diagrammbild mit C# 2010 in die Zwischenablage?

Wie kopiere ich das Bild des Diagramms in die Zwischenablage, damit es in andere Programme eingefügt werden kann?

Ich bin mit Visual Studio C# 2010

ich die chart.SaveImage Methode gefunden zu haben, aber ich würde das Bild in die Zwischenablage anstatt es auf der Festplatte speichern wirklich eher kopieren. Ich habe kein Diagramm gefunden. CopyPicture-Methode.

Ich habe auch herausgefunden, wie Sie die Rohdaten in die Zwischenablage als eine Zeichenfolge kopieren, die dann in ein Excel-Arbeitsblatt eingefügt und geplottet werden kann, aber ich würde lieber nur das Bild selbst kopieren.


Additonal Daten:

Ich bin in der Lage, das Bild in die Zwischenablage mit dem folgenden Code zu kopieren:

spectrumChart2.SaveImage("Image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
Image img = Image.FromFile("Image.jpg"); 
System.Windows.Forms.Clipboard.SetImage(img); 

Sicherlich ist es Art und Weise das Bild direkt Zwischenablage ohne Speichern und Abrufen zu erhalten es aus einer Datei zuerst. Bitte lass mich wissen, wie das geht (bevor einer meiner Kollegen diesen Klud) findet!

Antwort

23

Um das Bild von Chart Kontrolle zu bekommen, um es zu Speicher-Stream speichern, Bitmap erstellen und dann senden die Zwischenablage:

using (MemoryStream ms = new MemoryStream()) 
{ 
    chart1.SaveImage(ms, ChartImageFormat.Bmp); 
    Bitmap bm = new Bitmap(ms); 
    Clipboard.SetImage(bm); 
} 
+0

Es hat funktioniert! Vielen Dank für die Hilfe! – Curt

+0

Kleine Probleme: Die Etiketten werden auf diese Weise nicht angezeigt. Der Etikettenbereich wird in reinem Schwarz gehalten, was hässlich aussieht. Ich habe ein bisschen herumgespielt und etwas verändert. Beantwortete deine Antwort, schau es dir an! Havnt so vor, upvoted. – C4u

1

Verwenden Sie die statische Methode ...

Clipboard.SetImage(....); 
+0

Wie bekomme ich das Bild von der Diagrammsteuerung? – Curt

0

Ich spare das Diagramm Bilder als Metadatei (EMF) durch einen Speicher-Stream. Ich möchte die ursprüngliche Bildauflösung beibehalten und die Option zum Aufheben der Gruppierung der Vektorbilder beibehalten und sie in PowerPoint bearbeiten. Kürzlich habe ich ein Upgrade auf ein sehr hochauflösendes Notebook durchgeführt und festgestellt, dass das Chartbild mit viel leerem Platz gerahmt wurde. Wenn ich das Bild in PowerPoint oder Word einfügen, wird das eingefügte Bild sehr klein sein. Das manuelle Beschneiden und Anpassen der Größe ist nicht zufriedenstellend, und ich möchte meine Bildschirmauflösung nicht herabstufen, um die Bilder größer einzufügen. Hier ist die Lösung, die ich gefunden habe (unten).

Ich verwende VB.Net 2008, daher war die Chart.Clone-Methode nicht verfügbar. Ich musste eine separate Funktion implementieren, um das Diagramm zu klonen, aber wenn Sie eine neuere Version von Visual Studio haben, können Sie die folgende Zeile auskommentieren und die CloneMSChart-Funktion und die Zeile, die darauf verweist, löschen.Hier sind Hinweise auf die einschlägigen Websites, die ich verwendet, um die Lösung zu finden:

How to clone a chart

Exporting a high-resolution image

und hier ist die Verbundlösung:

‚---------- -------------------------------------------------- -

Public Sub CopyChartImageToClipBoard(ByVal ChartToSave As Chart) 
    Dim originalSize As Size = ChartToSave.Size 
    Dim screenWidth As Integer = Screen.PrimaryScreen.Bounds.Width 
    Dim screenHeight As Integer = Screen.PrimaryScreen.Bounds.Height 
    Dim cloneChart As New Chart 

    Using ms As New IO.MemoryStream() 
     Try 
      'cloneChart = CType(ChartToSave.Clone, Chart) 
      cloneChart = CloneMSChart(ChartToSave) 
      cloneChart.Size = New Size(screenWidth, screenHeight) ' copy a high resolution image 
      cloneChart.SaveImage(ms, System.Drawing.Imaging.ImageFormat.Png) 
      ms.Seek(0, SeekOrigin.Begin) 
      Using mf As New Bitmap(ms) 
       Clipboard.SetImage(mf) 
      End Using 

     Finally 
      ms.Close() 
      cloneChart.Dispose() 
     End Try 
    End Using 
End Sub 

'----------------------------------------- -------------------

Public Function CloneMSChart(ByVal chart1 As Chart) As Chart 
    Dim myStream As New System.IO.MemoryStream 
    Dim chart2 As Chart = New Chart 
    chart1.Serializer.Save(myStream) 
    chart2.Serializer.Load(myStream) 
    Return chart2 
End Function 

‚------------------------------------------ -------------

+0

Oops..dies speichert eine PNG, keine Metadatei. Dadurch wird das Problem der Größenänderung behoben, es ist jedoch nicht möglich, die Gruppierung aufzuheben und als Vektordatei zu bearbeiten. –

Verwandte Themen