2010-05-28 17 views
16

मेरे पास एक ग्राफिक्स ऑब्जेक्ट है जिसे मैंने स्क्रीन पर खींचा है और मुझे इसे एक पीएनजी या बीएमपी फ़ाइल में सहेजने की ज़रूरत है। ग्राफिक्स सीधे इसका समर्थन नहीं कर रहा है, लेकिन यह किसी भी तरह से संभव होना चाहिए।सिस्टम को सहेजना। ड्रॉइंग। ग्राफिक्स को पीएनजी या बीएमपी

क्या कदम हैं?

उत्तर

9

इसे Bitmap पर कॉपी करें और फिर बिटमैप की Save विधि पर कॉल करें।

नोट यदि आप स्क्रीन को ड्राइंग (स्क्रीन के डिवाइस संदर्भ हथियाने द्वारा) कर रहे हैं सचमुच, तो एक ही रास्ता को बचाने के लिए है कि क्या आप सिर्फ स्क्रीन पर आकर्षित किया से ड्राइंग प्रक्रिया को उल्टा करने के लिए है स्क्रीन से एक Bitmap। यह संभव है, लेकिन यह स्पष्ट रूप से बिटमैप पर सीधे आकर्षित करने के लिए बहुत आसान होगा (उसी कोड का उपयोग करके जिसे आप स्क्रीन पर आकर्षित करने के लिए उपयोग करते हैं)।

+5

: इस सवाल का शीर्षक के बावजूद, इस सवाल का जवाब एक मनमाना ग्राफिक्स एक छवि पर आपत्ति को बचाने के लिए नहीं दिखा है। यही है, ग्राफिक्स या बिटमैप में कोई फ़ंक्शन नहीं है जो "इसे कॉपी करें (ग्राफिक्स इंस्टेंस) को बिटमैप में कॉपी करें"। आखिरी वाक्य से, शायद यह 'ग्राफिक्स जी = ग्राफिक्स। फ्रॉम इमेज (बिटमैप)' करने का जिक्र कर रहा है, और उसके बाद ** आपके मूल ग्राफिक्स ऑब्जेक्ट की बजाय ** ग्राफिक्स (जी) को प्रस्तुत करना। फिर आप बिटमैप कर सकते हैं। जो आपने प्रदान किया है उसे सहेजने के लिए सहेजें। – ToolmakerSteve

1

आप शायद किसी छवि या नियंत्रण पर चित्रित कर रहे हैं। यदि नियंत्रण उपयोग Control.DrawToBitmap() पर ड्राइंग छवि पर

Image.Save("myfile.png",ImageFormat.Png) 

का उपयोग करें और तो ऊपर के रूप में वापस छवि को बचाने के।

सुधार के लिए धन्यवाद - मुझे पता नहीं था कि आप सीधे स्क्रीन पर आकर्षित कर सकते हैं।

+0

आप ग्राफिक्स का उपयोग कर सीधे स्क्रीन पर आकर्षित कर सकते हैं, जिसमें एक कन्स्ट्रक्टर है जो डिवाइस संदर्भ लेता है - आपको बस स्क्रीन की डिवाइस संदर्भ की आवश्यकता है। – MusiGenesis

+0

इसके लिए धन्यवाद, स्क्रीन पर सीधे ड्राइंग करने का प्रयास करने के लिए यह मेरे साथ कभी नहीं हुआ है! –

+0

मैं वास्तव में स्क्रीन पर ड्राइंग * नहीं * की सिफारिश करता हूं, क्योंकि ऐसा करने का कोई मतलब नहीं है। – MusiGenesis

2
Graphics graph = CreateGraphics(); 
Bitmap bmpPicture = new Bitmap("filename.bmp"); 

graph.DrawImage(bmpPicture, width, height); 
18

यहाँ कोड है: आपके ग्राफिक्स एक फार्म पर है

Bitmap bitmap = new Bitmap(Convert.ToInt32(1024), Convert.ToInt32(1024), System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
Graphics g = Graphics.FromImage(bitmap); 

// Add drawing commands here 
g.Clear(Color.Green); 

bitmap.Save(@"C:\Users\johndoe\test.png", ImageFormat.Png); 

, तो आप इस का उपयोग कर सकते हैं: एक वेब पेज पर बचाने के लिए

private void DrawImagePointF(PaintEventArgs e) 
{ 
    ... Above code goes here ... 

    e.Graphics.DrawImage(bitmap, 0, 0); 
} 

इसके अलावा, आप इसका उपयोग कर सकते हैं:

MemoryStream memoryStream = new MemoryStream(); 
bitmap.Save(memoryStream, ImageFormat.Png); 
var pngData = memoryStream.ToArray(); 

<img src="data:image/png;base64,@(Convert.ToBase64String(pngData))"/> 

ग्राफिक्स ऑब्जेक्ट्स हैं एक जीडीआई + ड्राइंग सतह। उनके पास एक फॉर्म या छवि को आकर्षित करने के लिए एक संलग्न डिवाइस संदर्भ होना चाहिए।

+3

मुझे नहीं लगता कि यह प्रश्न का उत्तर कैसे देता है, जो एक ग्राफिक्स ऑब्जेक्ट लेना है, और उसे बिटमैप में कॉपी करना है। यह कोड OPPOSITE करने लगता है। (मेरे पास ऐसी स्थिति है जहां एक विधि में "ग्राफिक्स" पारित किया जा रहा है, और "ग्राफिक्स" का स्रोत कोड में उस स्थान पर पहुंच योग्य नहीं है, केवल "ग्राफिक्स" ही।) – ToolmakerSteve

1

भविष्य पाठकों के लिए यह मेरे लिए ठीक काम करता है की कोशिश करो ...

private void SaveControlImage(Control ctr) 
{ 
    try 
    { 
     var imagePath = @"C:\Image.png"; 

     Image bmp = new Bitmap(ctr.Width, ctr.Height); 
     var gg = Graphics.FromImage(bmp); 
     var rect = ctr.RectangleToScreen(ctr.ClientRectangle); 
     gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size); 

     bmp.Save(imagePath); 
     Process.Start(imagePath); 

    } 
    catch (Exception) 
    { 
     // 
    } 
} 
संबंधित मुद्दे