• ベストアンサー
  • すぐに回答を!

drawImageメソッドの使い方

import com.sun.image.codec.jpeg.JPEGImageDecoder; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JPEGCodec; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.awt.image.BufferedImage; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.*; public class EdgeDetection extends Object { public static void main(String[] args) { BufferedImage in_bi = null; BufferedImage out_bi = new BufferedImage(134, 181, 1); Graphics2D outg2 = out_bi.createGraphics(); Shape s = new Line2D.Float(10.0f, 50.0f, 90.0f, 150.0f); outg2.drawImage(s, 0, 0, 0); JPEGImageEncoder ie = null; try { ie = JPEGCodec.createJPEGEncoder(new FileOutputStream(args[0])); } catch(FileNotFoundException e) { System.err.println("ファイルが見つかりません [write]"); System.err.println("Edge_" + args[0]); System.exit(253); } try { ie.encode(out_bi); } catch(IOException e) { System.err.println("書き込みに失敗しました"); System.exit(252); } } } ------------------------------------------------------------- このようなソースを作成してコンパイルを行ったのですが、35行目の drawImageでエラーが発生します。見直したところ drawImageの引数に間違いがあるとも思えないのですが、 他に何かエラーになるような個所があるのでしょうか? 開発キットはJDK1.3です。宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数747
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • yogawa
  • ベストアンサー率66% (4/6)

手元のAPI仕様(JDK1.2.2)によると、drawImage(Shape, int, int, int)に該当するメソッドは存在しないようです。 Shapeを描くには、 Graphics2D#draw(Shape s) を使うのではないでしょうか。 Graphics2Dを使ったことがないです。的外れだったらごめんなさい。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

こちらで行ってみたところ、うまくいくようで ばっちり的にあたりました。 ご回答ありがとうございました。

関連するQ&A

  • 任意の文字列をJAVAで画像化

    表題にある通り任意の文字列をJAVAで画像化したいと思い 下記サンプルを検索して見つけたのですが作成される画像は 真っ白な画像で文字列は表示されませんでした。 任意の文字列を画像として出力するにはどうすればよいでしょうか。 import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class Test5 { public static void main(String[] args) { String str = "abc123"; new Test5().Create(str); System.out.println(str); } public void Create(String str) { int w=60; int h=17; try { //受け取った文字列を画像化 BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics2D g2d=image.createGraphics(); g2d.setBackground(Color.WHITE); g2d.clearRect(0,0,w,h); g2d.setColor(Color.BLACK); g2d.drawString(str,0,0); ImageIO.write(image, "JPEG", new File("c:\\test.jpg")); } catch(Exception e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • createImage()を使いコンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • createImage()を使い コンパイル

    このプログラムをcreateImage()を使ってイメージを作りたいのですが自分で変更してもコンパイルできません><;どのように変更したらイメージをつくることができるのでしょうか?回答よろしくおねがいしまあす(^^; import java.awt.Color; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; class Test extends JComponent implements MouseMotionListener { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new Test()); frame.setBounds(0 , 0 , 400 , 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); } Image image; public Test() { addMouseMotionListener(this); image = new BufferedImage(400, 300, BufferedImage.TYPE INT RGB); Graphics g = image.getGraphics(); g.setColor(new Color(0xFF, 0xFF, 0xFF)); g.fillRect(0, 0, 400, 300); }public void paintComponent(Graphics g) { g.drawImage(image, 0, 0, this); } public void mouseDragged(MouseEvent e) { Graphics g = image.getGraphics(); g.setColor(new Color(0, 0, 0)); g.fillOval(e.getX() - 5, e.getY() - 5, 5 , 5); repaint(); }public void mouseMoved(MouseEvent e) {} }

  • repaint()が実行されません。

    repaint()が実行されません。 もともとあるJEditorPane上に画像表示させるために、他のクラスからrepaint()をよびだしてpaint()を実行させようとしているのですが、実行されません……。 以下にプログラムを表示します。 import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class Open extends JFrame {   public Open(){   }    public void paint(Graphics g){    System.out.println("paint開始");    Graphics2D g2 = (Graphics2D)g;    BufferedImage readImage = null;    try {    readImage = ImageIO.read(new File("sample.png"));    } catch (Exception e) {    e.printStackTrace();    readImage = null;    }      if (readImage != null){    g2.drawImage(readImage, 0, 0, this);    }    }    public void Fileload(){    System.out.println("再描写");    repaint();   } } 外部のクラスからFileload()を呼び出して実行すると"再描写"はコマンドプロンプト上に表示されるのですが"paint開始"は表示されません。なのでpaint()の呼び出しができていないのだと思うのですが……。 原因がわかりません……。 javaも質問も初心者なのでわかりづらいところがあるとは思いますが、どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • BufferedImageへの変換エラーです

     こんにちは。java初心者です、宜しくお願いします。  BufferedImageに変換したいんですが、引数の取り方が分かりません。  "srcimage1"を"BufferedImage" 、"Image"で取ってやっても"BufferedImageにキャスト出来ま せん"という意味のエラー表示が出るばかりでお手上げです。    どなたか詳しい方、エラーの原因についてどうか宜しくお願いします。 ========================================= public class BufferedImage1 extends Applet { static BufferedImage srcimage1 , newimg ; static Image srcimage0 ; //static BufferedImage srcimage0 ; static BufferedImage source ; static BufferedImage target ; static Graphics g ; static Graphics2D g2 ; static Image img ; public void init() { this.setLocation( 0 , 0 ) ; setBackground( Color.red ) ; g2 = (Graphics2D)g ; srcimage0 = getImage( getDocumentBase() , "a.gif" ) ; srcimage1 = ( BufferedImage )srcimage0 ; newimg = change(srcimage1 , new BufferedImage(100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE)) ; } public void paint(Graphics g) { g2.drawImage(newimg , 0 , 0 , null ) ; } public BufferedImage change( BufferedImage source , BufferedImage target) { this.source = source ; this.target = target ; Graphics2D g2 = target.createGraphics() ; g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION , RenderingHints.VALUE_INTERPOLATION_BICUBIC) ; double scalex = (double) target.getWidth() / source.getWidth() ; double scaley = (double) target.getHeight() / source.getHeight() ; AffineTransform xform = AffineTransform.getScaleInstance(scalex , scaley) ; g2.drawRenderedImage(source , xform) ; g2.dispose() ; return target ; } }

    • ベストアンサー
    • Java
  • 先に計算したほうがいいのでしょうか?

    下記のプログラムを作ったのですが、 Math.PI / 180 の部分は先に計算しておいたほうが処理が 早くなると言われたのですがそうなのでしょうか? 先に掛け算をしないといけないような気がするのですが。 import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.lang.Math; public class Test9 { public static void main(String[] args) { int r = (args.length > 0)? Integer.parseInt(args[0]):100; int n = (args.length > 1)? Integer.parseInt(args[1]):16; int x, y, x1, y1; try { BufferedImage image=new BufferedImage(r*2+10,r*2+10,BufferedImage.TYPE_INT_RGB); Graphics2D g2d=image.createGraphics(); g2d.setBackground(Color.WHITE); g2d.clearRect(0,0,r*2+10,r*2+10); g2d.setColor(Color.BLACK); for ( double i = 0.0; i < 360.0; i += 360.0 / n ) { x1 = (int) ( r * Math.cos( i * Math.PI / 180 ) ); y1 = (int) ( r * Math.sin( i * Math.PI / 180 ) ); for( double j = i + 360 / n; j < 360.0; j += 360.0 / n ) { x = (int) ( r * Math.cos( j * Math.PI / 180 ) ); y = (int) ( r * Math.sin( j * Math.PI / 180 ) ); g2d.drawLine( x1 + r + 5, y1 * (-1) + r + 5, x + r + 5, y * (-1) + r + 5 ); } } ImageIO.write(image, "JPEG", new File("c:\\test9.jpg")); } catch(Exception e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • javaで画像を表示したのですが、変です。

    画像をのせたのですが、表示した画像の透明部分のところに予期しない形で画像が重なってしまいます。 また、ウィンドウのサイズを何回かスクロールしていじると元に戻ります。 文字数の関係ですべてのソースを乗せられないのですが、自作画像クラスだけ記載します。 import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; public class Layer extends JPanel { BufferedImage image; int x=0,y=0; //表示サイズ int lx=0,ly=0; //表示場所 int originalX,originalY; int startX,startY; Layer(){ } public void p(String imgpath,int lX,int lY,int X,int Y){ x=X;y=Y;lx=lX;ly=lY; image=Imagedraw(imgpath); } public void p(String imgpath,int lX,int lY){ lx=lX;ly=lY; image=Imagedraw(imgpath); x=originalX; y=originalY; setSize(x,y); } public void p(String imgpath){ image=Imagedraw(imgpath); x=originalX; y=originalY; setSize(x,y); } public BufferedImage Imagedraw(String imgpath){ BufferedImage img=null; try{ img = readImage(imgpath); }catch(Exception e){ e.printStackTrace(); } setLocation(lx,ly); setSize(x,y); return img; } public void setLocation(int lX, int lY){ lx=lX;ly=lY; super.setLocation(lx,ly); } public void paint(Graphics g){ //イメージを描画 g.drawImage(image,0,0,x,y,startX,startY,x+startX,y+startY,this); } public BufferedImage readImage(String path) throws IOException{ BufferedImage img; img = ImageIO.read(new File(path)); originalX=img.getWidth(); originalY=img.getHeight(); return img; } } どなたか原因に心当たりのある方、よろしくお願いいたします。 なお、画像はインターネット上での拾いものです。書かれた方には感謝いたします。

  • java.lang.OutOfMemoryErrorというエラーがでる。

    javaを勉強しています。タイトルのように java.lang.OutOfMemoryErrorというエラーが出てしまいます。少し調べてみたらどうやらメモリーの使いすぎ(?)のようなのですが、プログラムの方に問題があるのでしょうか?それとも使えるメモリーを増やすといった解決策を取ったほうがいいのでしょうか? よろしくお願いします。プログラムはまず画像が表示されて、左クリックすると次の画像へ変わる、といった処理をするアプレットです。 package jibundesukosidutu; import java.applet.Applet; import java.awt.Graphics; import java.awt.MediaTracker; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Main extends Applet implements MouseListener{ File[] imagelist; File image = new File("image"); BufferedImage drawImage; static int i = 0; MediaTracker mt = new MediaTracker(this); public void init(){ imagelist = image.listFiles();//ディレクトリの画像ファイルたちを配列に入れていく。 addMouseListener(this); try { drawImage = ImageIO.read(imagelist[i]);//drawImageメソッドで画像ファイルとして引数を取れるように、型変換しておく。 } catch (IOException e) { e.printStackTrace(); } } public void paint(Graphics g){//drawImageファイルを表示するだけ int w, h; w = getSize().width; h = getSize().height; mt.addImage(drawImage,0); try { mt.waitForID(0); } catch (InterruptedException e) { e.printStackTrace(); } g.drawImage(drawImage,0,0,w,h,this);//imagelist[0]を表示したい。 } public void mouseClicked(MouseEvent e) { int btn = e.getButton(); if(btn == MouseEvent.BUTTON1){//左クリック=進め System.out.println("左クリック"); i++; //searchFile(true); try { drawImage = ImageIO.read(imagelist[i]); } catch (IOException e1) { e1.printStackTrace(); } repaint(); }else if(btn == MouseEvent.BUTTON2){ System.out.println("右クリック"); //searchFile(false); } } public void searchFile(boolean next){ //next→次の画像、false→前の画像 } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • 画像の重ね合わせがうまくできません・・

    はじめまして。 画像を重ね合わせるプログラムを作成したいのですが、 期待通りにならないため悩んでおります。 Aという画像を下地に、Bという画像の特定RGBのドットを透過させて合成した画像を作りたいのですが、 どうもうまくいかず、半透明な絵ができてしまいます。 (Aがうっすらと見え、Bが重なるかんじ) 合成部分のコーディングは以下です。 AlphaCompositeの使い方が間違っているのか、AlphaCompositeではなく 別のクラスを使うのか、そもそも APIではできなくてドットを一個一個書い ていく必要があるのか・・? ご存じの方がいましたら、なにとぞご教授、お願いいたします。 public BufferedImage mergeTwice(BufferedImage baseImage, BufferedImage layImage) { // BufferedImage を Graphic2D に変換 Graphics2D baseGra = baseImage.createGraphics(); Graphics2D layGra = layImage.createGraphics(); // 2つの画像を合成 AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f); baseGra.setComposite( composite ); baseGra.drawImage(layImage, 0, 0, null); AlphaComposite composite2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f); return baseImage; }