2009-06-17 11 views
10

मैंने एक जेपीजी छवि लोड की है जिसमें मैं अक्षरों और मंडलियों को आकर्षित करना चाहता हूं, एक एक्स, वाई समन्वय दिया गया है।मैं जावा के माध्यम से एक jpg छवि कैसे संपादित कर सकता हूं?

मैं बाहर ImageIcon वर्ग

public void paintIcon(Component c, 
         Graphics g, 
         int x, 
         int y) 

इस विधि मुझे जेपीजी चित्रों को संपादित करने की अनुमति है की paintIcon तरह से मैं चाहता हूँ लगाने की कोशिश कर रहे हैं? घटक सी और ग्राफिक्स जी पैरामीटर होने के लिए क्या माना जाता है? मंडलियों या अक्षरों को पेंट करने के लिए मैं अपने शरीर में क्या जोड़ूं?

मैं नेटबीन्स 6.5 पर काम कर रहा हूं, क्या मेरे पास इस कार्य के लिए कुछ भी बनाया गया है (ImageIcon के बजाय)?

उत्तर

15

शुद्ध जावा जिस तरह से एक के रूप में BufferedImageImageIOload करने के लिए छवि का उपयोग करने के लिए है देख सकते हैं। फिर आप ऑब्जेक्ट प्राप्त करने के लिए createGraphics() पर कॉल कर सकते हैं; फिर आप छवि पर जो कुछ भी चाहते हैं उसे खींच सकते हैं।

आप एक ImageIcon एक JLabel में एम्बेडेड का उपयोग प्रदर्शित करने के लिए कर सकते हैं, और आप JLabel करने के लिए एक MouseListener और/या एक MouseMotionListener जोड़ सकते हैं अगर आप उपयोगकर्ता छवि संपादित करने के लिए अनुमति देने के लिए कोशिश कर रहे हैं।

5

ऐसा करने के लिए लाइब्रेरी का उपयोग करें। एक जिसे आप कोशिश कर सकते हैं JMagick है।

1

मुझे लगता है कि आप यूआई में छवि खींचे जाने पर हर बार आवश्यक तत्वों को ओवरले करने के लिए इस विधि का उपयोग कर सकते हैं (यह कई बार होता है क्योंकि आप छवि डेटा पर स्वयं नहीं आ रहे हैं) लेकिन यह आपके लिए उपयुक्त हो सकता है उद्देश्यों (और समय के साथ ओवरले बदलता है तो फायदेमंद)।

कुछ की तरह:

new ImageIcon("someUrl.png"){ 
    public void paintIcon(Component c, Graphics g, int x, int y) { 
     super(c, g, x, y); 
     g.translate(x, y); 

     g.drawOval(0, 0, 10, 10); 
     ... 

     g.translate(-x, -y); 
    } 
}; 

कहा करने के बाद कि, mmyers 'जवाब काफी बेहतर है अगर आप छवि डेटा को संशोधित करना चाहते है।

9

जावा में छवियों को मैनिपुलेट करने से Graphics या Graphics2D संदर्भों का उपयोग करके हासिल किया जा सकता है।

जेपीईजी और पीएनजी जैसी छवियों को लोड करना ImageIO कक्षा का उपयोग करके किया जा सकता है। ImageIO.read विधि File में पढ़ने और BufferedImage लौटाती है, जिसका उपयोग Graphics2D (या Graphics, इसके सुपरक्लास) संदर्भ के माध्यम से छवि में हेरफेर करने के लिए किया जा सकता है।

Graphics2D संदर्भ कई छवि ड्राइंग और हेरफेर कार्यों को करने के लिए उपयोग किया जा सकता है। जानकारी और उदाहरणों के लिए, Trail: 2D GraphicsThe Java Tutorials बहुत अच्छी शुरुआत होगी।

के बाद एक सरलीकृत उदाहरण (untested) जो एक JPEG फ़ाइल खुल जाएगा, और कुछ हलकों और लाइनों आकर्षित (अपवाद अनदेखी कर रहे हैं) है:

// Open a JPEG file, load into a BufferedImage. 
BufferedImage img = ImageIO.read(new File("image.jpg")); 

// Obtain the Graphics2D context associated with the BufferedImage. 
Graphics2D g = img.createGraphics(); 

// Draw on the BufferedImage via the graphics context. 
int x = 10; 
int y = 10; 
int width = 10; 
int height = 10; 
g.drawOval(x, y, width, height); 

g.drawLine(0, 0, 50, 50); 

// Clean up -- dispose the graphics context that was created. 
g.dispose(); 

ऊपर कोड एक JPEG छवि खुल जाएगा, और एक आकर्षित अंडाकार और एक रेखा।एक बार इन ऑपरेशन को छवि में हेरफेर करने के लिए किया जाता है, BufferedImage किसी अन्य Image की तरह संभाला जा सकता है, क्योंकि यह Image का उप-वर्ग है।

उदाहरण के लिए, एक ImageIcon बनाने BufferedImage का उपयोग करके, एक एक JButton या JLabel में छवि एम्बेड कर सकते हैं:

JLabel l = new JLabel("Label with image", new ImageIcon(img)); 
JButton b = new JButton("Button with image", new ImageIcon(img)); 

JLabel और JButton दोनों कंस्ट्रक्टर्स जो एक ImageIcon में है, इसलिए है कि हो सकता है एक स्विंग घटक में एक छवि जोड़ने के लिए एक आसान तरीका है।

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

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