2009-06-17 1 views
10

x、y座標を指定して、文字と円を描きたいjpgイメージをロードしました。Javaからjpgイメージを編集するにはどうすればよいですか?

私は私が望むように、この方法は私がJPG画像を編集することができないImageIconクラス

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

のpaintIconを把握しようとしていますか?コンポーネントcとグラフィックスgパラメータとは何でしょうか?サークルや手紙を描くために私の体に何を追加しますか?

私はNetbeans 6.5で作業していますが、ImageIconの代わりにこのタスクに何か組み込みがありますか?

答えて

15

純粋なJavaの道はBufferedImageとしてImageIOloadに画像を使用することで見ることができます。次に、createGraphics()に電話してGraphics2Dオブジェクトを取得することができます。次に、あなたが望むものをイメージに描画することができます。

あなたは、表示を行うためにJLabelに埋め込まImageIconを使用することができ、そしてあなたは、ユーザーが画像を編集できるようにしようとしている場合は、JLabelMouseListenerおよび/またはMouseMotionListenerを追加することができます。

5

これを行うにはライブラリを使用してください。あなたが試みるかもしれないものはJMagickです。

1

I imagen画像をUIに描画するたびに、このメソッドを使用してオーバーレイすることができます(これは画像データを描画していないので何度も起こりますが)。オーバーレイが時間とともに変化する場合に有利である。以下のような

何か:

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

Javaで画像を操作するには、GraphicsまたはGraphics2Dのコンテキストを使用します。

ImageIOクラスを使用すると、JPEGやPNGなどの画像を読み込むことができます。 メソッドは、を読み込み、Graphics2D(またはGraphics、スーパークラス)のコンテキストを使用してイメージを操作するために使用できるBufferedImageを返します。

Graphics2Dコンテキストは、多くのイメージ描画操作タスクを実行するために使用できます。情報と例については、Trail: 2D GraphicsThe Java Tutorialsが非常に良いスタートになります。続い

は(例外は無視される)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画像を開き、描画します楕円形と線。画像を操作するためにこれらの操作が実行されると、Imageのサブクラスであるので、BufferedImageは他のImageのように扱うことができます。例えば、BufferedImageを用いImageIconを作成することによって、一つはJButton又はJLabelに画像を埋め込むことができる

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

JLabelJButton両方がImageIconに取るコンストラクタを持っているので、それはすることができSwingコンポーネントに画像を追加する簡単な方法です。

関連する問題