2009-08-28 16 views
13

क्या एक जेफनेल (जिसे अभी तक प्रदर्शित नहीं किया गया है) को बुफर्ड इमेज में बदलने का कोई तरीका है?जेननेल को छवि में कनवर्ट करें

धन्यवाद,

जेफ

+0

ठीक है, मैं हार मानता हूं। मैंने आपको पिछले दो पोस्टिंग में दो जवाब दिए हैं जिन्हें आपने पूरी तरह अनदेखा कर दिया है। भावी पोस्टिंग के साथ शुभकामनाएँ। – camickr

+0

मैं प्रतिक्रियाओं की सराहना करता हूं और मैं उन्हें अनदेखा नहीं कर रहा हूं। इस पोस्ट पर, स्क्रीन इमेज बिल्कुल वैसा ही नहीं था जिसे मैं ढूंढ रहा था और अन्य ग्राफिक्स पर पेंटिंग करने की यह विधि मेरे लिए सही दिशा थी। संवाद बॉक्स पोस्ट पर, यह एक गैर-मुद्दा साबित हुआ और मुझे दलदल कर दिया गया है इसलिए मैं सबकुछ का जवाब नहीं दे रहा हूं। मैं आपकी प्रतिक्रियाओं की सराहना करता हूं। –

उत्तर

23

BufferedImage आप बना सकते हैं एक ग्राफिक्स वस्तु है, जो आप की तरह JPanel पर रंग, कुछ कॉल करने के लिए उपयोग कर सकते हैं से:

public BufferedImage createImage(JPanel panel) { 

    int w = panel.getWidth(); 
    int h = panel.getHeight(); 
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g = bi.createGraphics(); 
    panel.paint(g); 
    return bi; 
} 

आप की आवश्यकता हो सकती सुनिश्चित करें कि आप पहले पैनल का आकार सेट करें।

+0

अच्छा, धन्यवाद। क्या कोई तरीका है कि मैं यह समझ सकता हूं कि पैनल का आकार क्या हो सकता है (शायद इसका पसंदीदा आकार)? –

+0

मेरा मानना ​​है कि यह पसंदीदा आकार या वर्तमान आकार है, जब तक इसे पहले ही प्रस्तुत किया गया हो। समस्याएं हैं यदि इसे पहले से ही प्रस्तुत नहीं किया गया है - मुझे सटीक विनिर्देशों को याद नहीं किया जा सकता है, लेकिन मुझे प्रिंटिंग सिस्टम को कार्यान्वित करते समय समान गुणों में चलना याद है। – aperkins

+0

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

2

मूल रूप से मैं एक घटक एक छवि को पत्र लिखा करने के लिए, लेकिन प्रदर्शित नहीं किया

ScreenImage बताते हैं कि कैसे आप क्या चाहते करने की जरूरत है कि निर्माण कर रहा हूँ।


ScreenImage.java (थोड़ा संपादित) का प्रासंगिक खंड। layoutComponent सभी बटन छवि में दिखाई देते हैं।

/** 
* @return Renders argument onto a new BufferedImage 
*/ 
public BufferedImage createImage(JPanel panel, int width, int height) { 
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = bi.createGraphics(); 
    panel.setSize(width, height); // or panel.getPreferedSize() 
    layoutComponent(panel); 
    panel.print(g); 
    return bi; 
} 

private void layoutComponent(Component component) { 
    synchronized (component.getTreeLock()) { 
     component.doLayout(); 

     if (component instanceof Container) { 
      for (Component child : ((Container) component).getComponents()) { 
       layoutComponent(child); 
      } 
     } 
    } 
} 
0

BasicTableUI पर एक नज़र डालें। सेल रेंडरर बिना छवि के चित्र पर खींचा जाता है और फिर दृश्य तालिका घटक पर खींचा जाता है।

0

टॉम का उत्तर मूल रूप से सही है, लेकिन paint() का आह्वान सीधे अनुशंसित नहीं है, क्योंकि यह एक सिंक्रोनस कॉल है और स्विंग थ्रेड पर अन्य ऑपरेशन के साथ बाधित हो सकता है। इसके बजाय paint() का उपयोग कर के, हम print() बजाय

public BufferedImage createImage(JPanel panel) { 

int w = panel.getWidth(); 
int h = panel.getHeight(); 
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
Graphics2D g = bi.createGraphics(); 
panel.print(g); 
return bi; 
} 
1

मैं सहमत हूँ उपयोग करना चाहिए। JPanel.print() बेहतर है। JPanel.paint() मेरे आवेदन में एक त्रुटि का कारण बनता है।

public BufferedImage createImage(JPanel panel) { 

int w = panel.getWidth(); 
int h = panel.getHeight(); 
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
Graphics2D g = bi.createGraphics(); 
panel.print(g); 
return bi; 
} 
संबंधित मुद्दे