2008-11-05 4 views
32

आप प्रोग्रामेटिक रूप से नेट नियंत्रण की तस्वीर कैसे प्राप्त करते हैं?प्रोग्रामेटिक रूप से .Net WinForms नियंत्रण का स्क्रीन कैप्चर कैसे प्राप्त करें?

+0

यह थोड़ा अस्पष्ट है, यह समझाने की कोशिश करें कि आप क्या करने की कोशिश कर रहे हैं। नीचे मत मत घूमना। –

+1

कोई भटकना नहीं है? मुझे लगता है कि अर्थ पूरी तरह स्पष्ट है। वह एक नियंत्रण के बिटमैप प्रतिनिधित्व प्राप्त करना चाहता है। – Will

+3

मैं विल के साथ सहमत हूं। यह एक सरल और स्पष्ट सवाल है। – Bogdan

उत्तर

48

DrawToBitmap नामक प्रत्येक नियंत्रण पर एक विधि है। ऐसा करने के लिए आपको पी/आवेक करने की आवश्यकता नहीं है।

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds); 

यह सब नियंत्रण के साथ काम नहीं करता है, तथापि:

Control c = new TextBox(); 
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height); 
c.DrawToBitmap(bmp, c.ClientRectangle); 
3

इसका समर्थन WinForms नियंत्रण के लिए, वहाँ System.Windows.Forms.Control कक्षा में एक विधि है। तीसरे पक्ष के घटक विक्रेताओं के पास अधिक व्यापक समाधान हैं।

7

आप में शुरू होने वाले .NET 2.0

यहाँ VB में

Dim formImage As New Bitmap("C:\File.bmp") 
    Me.DrawToBitmap(formImage, Me.Bounds) 
एक नमूना है बहुत आसानी से प्रोग्राम के रूप में एक .NET नियंत्रण का एक चित्र प्राप्त नियंत्रण वर्ग के DrawToBitmap विधि का उपयोग कर सकते हैं

और यहाँ यह सी # में है:

Bitmap formImage = New Bitmap("C:\File.bmp") 
this.DrawToBitmap(formImage, this.Bounds) 
1

अगर यह सह पर नहीं है ntrol आप करने की कोशिश कर रहे हैं, आप आमतौर पर इसे बेस कंट्रोल क्लास में डाल सकते हैं और DrawToBitmap विधि को कॉल कर सकते हैं।

5

नियंत्रण। DrawToBitmap आपको बिटमैप पर अधिकतर नियंत्रण आकर्षित करने देगा। यह RichTextBox और कुछ अन्य के साथ काम नहीं करता है। यदि आप इन्हें कैप्चर करना चाहते हैं, या उनमें से एक नियंत्रण है, तो आपको जेफ द्वारा सुझाए गए कोड प्रोजेक्ट आलेख http://www.codeproject.com/KB/graphics/imagecapture.aspx में वर्णित PInvoke करना होगा। ध्यान रखें कि इनमें से कुछ विधियां स्क्रीन पर जो कुछ भी कैप्चर करेंगे, इसलिए यदि आपके पास अपने नियंत्रण को कवर करने वाली एक और विंडो है तो आपको इसके बजाय मिल जाएगा।

+0

वेब ब्रोसर के लिए, मैंने बस इसे नियंत्रित करने और उसे वहां कॉल करने के लिए डाला। मैंने इसे किया है और यह जानता है कि यह काम करता है। RichTextBox के बारे में निश्चित नहीं है – Nick

1
Panel1.Dock = DockStyle.None ' If Panel Dockstyle is in Fill mode 
Panel1.Width = 5000 ' Original Size without scrollbar 
Panel1.Height = 5000 ' Original Size without scrollbar 

Dim bmp As New Bitmap(Me.Panel1.Width, Me.Panel1.Height) 
Me.Panel1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height)) 
'Me.Panel1.DrawToBitmap(bmp, Panel1.ClientRectangle) 
bmp.Save("C:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 

Panel1.Dock = DockStyle.Fill 

नोट: इसका काम कर ठीक

2

यह कैसे एक पूरे Form के लिए ही नहीं, ग्राहक क्षेत्र (जो शीर्षक पट्टी और अन्य ड्रेसिंग नहीं है)

यह करने के लिए, है
 Rectangle r = this.Bounds; 
     r.Offset(-r.X,-r.Y); 
     Bitmap bitmap = new Bitmap(r.Width,r.Height); 
     this.DrawToBitmap(bitmap, r); 
     Clipboard.SetImage(bitmap); 
संबंधित मुद्दे