2010-10-04 15 views
6

मुझे पता है कि JComponent से BufferedImage कैसे प्राप्त करें, लेकिन जावा में एक घटक से BufferedImage कैसे प्राप्त करें? यहां पर जोर JComponent की बजाय "घटक" प्रकार का एक वस्तु है।जावा में एक घटक से BufferedImage कैसे प्राप्त करें?

मैंने निम्न विधि की कोशिश की, लेकिन यह एक काला छवि वापस कर देता है, इसमें क्या गलत है?

public static BufferedImage Get_Component_Image(Component myComponent,Rectangle region) throws IOException 
    { 
    BufferedImage img = new BufferedImage(myComponent.getWidth(), myComponent.getHeight(), BufferedImage.TYPE_INT_RGB); 
    Graphics g = img.getGraphics(); 
    myComponent.paint(g); 
    g.dispose(); 
    return img; 
    } 
+1

आप "JComponent से एक BufferedImage मिल" से क्या मतलब है? – aioobe

+0

मेरा नया उत्तर देखें। अब यह काम कर रहा है। (परीक्षण किया गया) –

उत्तर

1

आप Component.paintAll का उपयोग करने का प्रयास कर सकते हैं।

आप ग्राफिक्स ऑब्जेक्ट (आपकी बफर्ड छवि से आने) के संदर्भ को SwingUtilities.paintComponent पर भी संदर्भित कर सकते हैं।

+0

मैं आपके साथ हूं कि क्यू का इरादा स्पष्ट नहीं किया गया है। यह अच्छा होगा अगर आपने विशेष उपयोग केस का उल्लेख किया था जिसके लिए आपका उत्तर उपयुक्त है। –

8

Component में एक विधि paint(Graphics) है। वह विधि पारित ग्राफिक्स पर खुद को पेंट करेगी। BufferedImage बनाने के लिए हम इसका उपयोग करने जा रहे हैं, क्योंकि BufferedImage में आसान तरीका getGraphics() है। यह Graphics -object देता है जिसका उपयोग आप BufferedImage पर आकर्षित करने के लिए कर सकते हैं।

अद्यतन: लेकिन हमें पेंट विधि के लिए ग्राफिक्स को पूर्व-कॉन्फ़िगर करना होगा। यही कारण है कि मैं AWT घटक java.sun.com पर प्रतिपादन के बारे में क्या पाया है:

AWT इस विधि का आह्वान करते हैं, ग्राफिक्स वस्तु पैरामीटर है उचित राज्य के साथ पहले से कॉन्फ़िगर इस विशेष घटक पर ड्राइंग के लिए:

  • ग्राफिक्स ऑब्जेक्ट का रंग घटक की अग्रभूमि संपत्ति पर सेट है।
  • ग्राफिक्स ऑब्जेक्ट का फ़ॉन्ट घटक की फ़ॉन्ट प्रॉपर्टी पर सेट है।
  • ग्राफिक्स ऑब्जेक्ट का अनुवाद इस प्रकार सेट किया गया है कि समन्वय (0,0) घटक के ऊपरी बाएं कोने का प्रतिनिधित्व करता है।
  • ग्राफिक्स ऑब्जेक्ट का क्लिप आयताकार उस घटक के क्षेत्र में सेट है जिसे पुनर्भुगतान की आवश्यकता है।

तो, यह हमारे जिसके परिणामस्वरूप विधि है:

public static BufferedImage componentToImage(Component component, Rectangle region) throws IOException 
{ 
    BufferedImage img = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); 
    Graphics g = img.getGraphics(); 
    g.setColor(component.getForeground()); 
    g.setFont(component.getFont()); 
    component.paintAll(g); 
    if (region == null) 
    { 
     region = new Rectangle(0, 0, img.getWidth(), img.getHeight()); 
    } 
    return img.getSubimage(region.x, region.y, region.width, region.height); 
} 
+1

यह 'घटक' के लिए आप इसे कैसे करेंगे, यह अलग कैसे है? मुझे लगता है कि सवाल को कुछ स्पष्टीकरण की जरूरत है। – aioobe

+0

मैं इसे कोशिश करता हूं, अभी भी काम नहीं करता है, हो सकता है क्योंकि जिस घटक को मैंने पास किया है वह जेडीआईसी से वेबब्रोसर ऑब्जेक्ट है, यह एक हल्का वजन घटक है, जैसा कि मैंने अपने दूसरे प्रश्न में उल्लेख किया है, क्या आप जानते हैं कि इसे कैसे काम करना है? किसी ने सुझाव दिया कि मैं सेलरेंडरपेन का उपयोग करता हूं, लेकिन मुझे नहीं पता कि मेरे मामले में इसका उपयोग कैसे किया जाए, कोई नमूना कोड? – Frank

+0

+1 निष्पादन उत्तर –

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