2009-06-17 7 views
10

İçinde x, y koordinatı verilen harf ve daireler çizmek istediğim bir jpg görüntüsü yükledim.Java ile jpg görüntüsünü nasıl düzenleyebilirim?

ben istediğim gibi bu yöntem bana jpg görüntüleri düzenlemek için izin veriyor mu ImageIcon sınıfa

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

ait paintIcon anlamaya çalışıyorlar? Bileşen c ve Grafik g parametreler olmak ne anlama geliyor? Çevrelerine veya harflere boyamak için vücuduna ne eklerim?

Netbeans 6.5 üzerinde çalışıyorum, bu görev için yerleşik bir şey var mı (ImageIcon yerine)?

cevap

15

saf-Java yolu BufferedImage olarak ImageIOload görüntüyü kullanmaktır bakabilirsiniz. Daha sonra Graphics2D nesnesini almak için createGraphics() numaralı telefonu arayabilirsiniz; Daha sonra istediğiniz resmin üzerine çizebilirsiniz.

göstermiyorsunuz yapmak için bir JLabel gömülü bir ImageIcon kullanabilir ve kullanıcı resmini düzenlemek için izin çalışıyorsanız eğer JLabel bir MouseListener ve/veya MouseMotionListener ekleyebilir.

5

Sadece bunu yapmak için bir kitaplık kullanın. Deneyebileceğiniz bir tanesi JMagick.

1

Görüntüyü kullanıcı arabiriminde her çizildiğinde ihtiyacınız olan öğelerin üst üste bindirilmesi için bu yöntemi kullanabileceğinizi hayal ediyorum (bu, görüntü verisini kendiniz çizmediğinizde birçok kez olabilir) ancak sizin için uygun olabilir. amaçlar (ve zamanla kaplamanın zamanla değişmesi durumunda avantajlıdır). gibi

şey:

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); 
    } 
}; 

görüntü verileri değiştirmek istiyorsanız mmyers' cevabı çok daha iyidir, Having.

9

Java'da görüntü işleme, Graphics veya Graphics2D bağlamları kullanılarak gerçekleştirilebilir.

JPEG ve PNG gibi görüntülerin yüklenmesi ImageIO sınıfı kullanılarak gerçekleştirilebilir. ImageIO.read yönteminin okunması ve görüntüyü Graphics2D (veya Graphics, üst sınıf) bağlamı aracılığıyla değiştirmek için kullanılabilen bir BufferedImage değerini döndürmesi için bir File alır.

Graphics2D içeriği birçok resim çizimi ve değiştirme görevi gerçekleştirmek için kullanılabilir. Bilgi ve örnekler için, The Java Tutorials'un Trail: 2D Graphics çok iyi bir başlangıç ​​olacaktır.

bir JPEG dosyası açın ve bazı çevreleri ve çizgiler çizmek hangi (denenmemiş) basitleştirilmiş bir örnek (istisnalar dikkate alınmaz) şudur:

// 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(); 

bir JPEG görüntüsü açın ve bir çekecektir Yukarıdaki kod Oval ve bir çizgi.Bu işlemler görüntüyü değiştirmek için gerçekleştirildikten sonra BufferedImage, Image'un bir alt sınıfı olduğundan, diğer Image gibi işlenebilir. Örneğin, BufferedImage kullanarak ImageIcon oluşturarak

bir JButton veya JLabel bir görüntüyü gömmek için:

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

JLabel ve JButton ikisi de bir ImageIcon almak Kurucular, olabilir ki böylece Swing bileşenine görüntü eklemenin kolay bir yolu.