2010-01-04 12 views
15

मैं सी # सीख रहा हूं क्योंकि मैं एक प्रोग्राम लिखता हूं जो एक स्पेक्ट्रोमीटर के साथ इंटरफेस करता है। मैंने यह पता लगाया है कि स्पेक्ट्रोमीटर से स्पेक्ट्रम कैसे प्राप्त करें और इसे एमएस चार्ट पर प्लॉट करें।मैं सी # 2010 का उपयोग कर क्लिपबोर्ड पर एक चार्ट छवि की प्रतिलिपि कैसे बना सकता हूं?

मैं चार्ट की छवि को क्लिपबोर्ड में कैसे कॉपी करूं ताकि इसे अन्य प्रोग्राम्स में चिपकाया जा सके?

मैं उपयोग कर रहा हूँ दृश्य स्टूडियो सी # 2010

मैं chart.SaveImage विधि पाया है, लेकिन मैं वास्तव में नहीं बल्कि बल्कि डिस्क में सहेजने के लिए की तुलना में क्लिपबोर्ड करने के लिए छवि की नक़ल की। मुझे एक चार्ट नहीं मिला है। कॉपी चित्र विधि।

मैंने यह भी पता लगाया कि कच्चे डेटा को एक स्ट्रिंग के रूप में क्लिपबोर्ड पर कैसे कॉपी किया जाए, जिसे तब एक्सेल वर्कशीट में चिपकाया जा सकता है और प्लॉट किया जा सकता है, लेकिन मैं सिर्फ छवि को प्रतिलिपि बनाना चाहता हूं।


Additonal डेटा:

मैं निम्नलिखित कोड का उपयोग कर क्लिपबोर्ड चित्र को कॉपी करने में सक्षम हूँ:

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

निश्चित रूप से छवि सीधे बचत और पुन: प्राप्त करने के बिना क्लिपबोर्ड पाने के लिए जिस तरह से है यह पहले एक डिस्क फ़ाइल से। कृपया, कृपया मुझे बताएं कि यह कैसे किया जाता है (मेरे सहकर्मियों में से एक को यह क्लज मिल जाता है)!

उत्तर

23

चार्ट नियंत्रण से छवि प्राप्त करने के लिए, स्मृति धारा में सहेजें, बिटमैप बनाने और उसके बाद इसे भेजने क्लिपबोर्ड:

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

यह काम किया! सहायता के लिए आपका बहुत - बहुत धन्यवाद! – Curt

+0

छोटी समस्याएं: लेबल इस तरह से दिखाई नहीं देंगे। लेबल-क्षेत्र को शुद्ध काला रंग दिया जाएगा जो नरक के रूप में बदसूरत दिखता है। मैंने थोड़ा सा खेला और बदलने के लिए थोड़ा सा पाया। अपना जवाब संपादित करें, इसे जांचें! Havnt पहले इस तरह से जाना जाता है, ऊपर उठाया। – C4u

1

उपयोग स्थिर विधि ...

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

मैं चार्ट नियंत्रण से छवि कैसे प्राप्त करूं? – Curt

0

मैं बचत कर रहा हूँ मेमोरी स्ट्रीम के माध्यम से चार्ट छवियों को मेटाफाइल (ईएमएफ) के रूप में। मैं मूल छवि संकल्प को संरक्षित करना चाहता हूं और वेक्टर छवियों को गठबंधन करने और उन्हें PowerPoint में संपादित करने के विकल्प को संरक्षित करना चाहता हूं। हाल ही में, मैंने एक बहुत ही उच्च-रिज़ॉल्यूशन लैपटॉप में अपग्रेड किया और मैंने पाया कि चार्ट छवि को बहुत खाली जगह के साथ बनाया जा रहा था। अगर मैं छवि को पावरपॉइंट या वर्ड में पेस्ट करता हूं, तो पेस्ट की गई छवि बहुत छोटी होगी। मैन्युअल रूप से क्रॉपिंग और आकार बदलना संतोषजनक नहीं है, और छवियों को बड़े पेस्ट करने के लिए मैं अपने स्क्रीन रिज़ॉल्यूशन को डाउनग्रेड नहीं करना चाहता हूं। यहां मिला समाधान (नीचे) है।

मैं वीबी.Net 2008 का उपयोग कर रहा हूं, इसलिए चार्ट.क्लोन विधि उपलब्ध नहीं थी। मुझे चार्ट क्लोन करने के लिए एक अलग फ़ंक्शन लागू करना था, लेकिन यदि आपके पास विजुअल स्टूडियो का एक नवीनतम संस्करण है, तो आप नीचे दी गई रेखा को असम्बद्ध कर सकते हैं और क्लोनएमएस चार्ट फ़ंक्शन और इसे संदर्भित करने वाली रेखा को हटा सकते हैं।यहाँ प्रासंगिक वेबसाइटों मैं समाधान खोजने के लिए इस्तेमाल किया के लिए संदर्भ:

How to clone a chart

Exporting a high-resolution image

और यहाँ समग्र समाधान है:

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

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

ओह ... यह एक पीएनजी बचाता है, मेटाफाइल नहीं। यह आकार बदलने के मुद्दे को हल करता है, लेकिन यह एक वेक्टर फ़ाइल के रूप में ungrouping और संपादन की अनुमति नहीं देता है। –

संबंधित मुद्दे

 संबंधित मुद्दे