• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BufferedImageへの変換エラーです)

BufferedImageへの変換エラーです

このQ&Aのポイント
  • BufferedImageに変換したいんですが、引数の取り方が分かりません。
  • "srcimage1"を"BufferedImage"、"Image"で取ってやっても"BufferedImageにキャスト出来ません"という意味のエラー表示が出るばかりでお手上げです。
  • エラーの原因についてどうか宜しくお願いします。

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.6

 #2さんへ  返信、ありがとうございます。  簡単なサンプルを使って実験してみました。 (A) public class AppletTest extends Applet {     BufferedImage image;          @Override     public void init() {         try {             URL url = new URL(this.getCodeBase().toString() + "test.JPG");             image = ImageIO.read(url);         } catch (MalformedURLException ex) {             System.err.println(ex);         } catch (IOException ex) {             System.err.println(ex);         }     }     @Override     public void paint(Graphics g) {         super.paint(g);         g.drawImage(image, 0, 0, this);     } } (B) public class AppletTest extends Applet {     BufferedImage image;          @Override     public void init() {         try {             File url = new File(this.getCodeBase().getPath() + "test.JPG");             image = ImageIO.read(url);         } catch (IOException ex) {             System.err.println(ex);         }     }     @Override     public void paint(Graphics g) {         super.paint(g);         g.drawImage(image, 0, 0, this);     } }  (A)は、 1.ファイルが自分のハードディスク内にありアプレットビューアーで実行。  成功 2.ファイルがWebサーバー中にあり、ブラウザで実行。  成功  ですが、(B)は、 1.ファイルが自分のハードディスク内にありアプレットビューアーで実行。  成功 2.ファイルがWebサーバー中にあり、ブラウザで実行。  失敗  でした。  やはり、Fileクラスを使うのは、問題が残るのではないでしょうか?

その他の回答 (6)

  • covachan
  • ベストアンサー率38% (46/120)
回答No.7

#6さん あ、すみません。 ウェブ上ということだったのですね。 私はローカルファイルでしか試していません。 ローカルの画像を読み込む感じです。 そもそも、どこの画像を使うかなんて 質問にないですし、処理の書き方の問題ですので そこで意見を言われても正直参りますし、意味はないでしょう?

  • covachan
  • ベストアンサー率38% (46/120)
回答No.5

>>#4さんへ 確かにソースの書き方に問題はありましたが、 変更はしたものの、Fileでも動きますよ。 java docにもありますので問題はないと思いますが、 使い方的にということでしょうか? 参考に動作させてみたソース載せますので、 主さんも参考までに確認をしてみてください。 public void init() { this.setLocation( 0 , 0 ) ; setBackground( Color.red ) ; try{ g2 = (Graphics2D)g ; URL url = getCodeBase(); BufferedImage bi = ImageIO.read(new File(url.getPath()+"/a.gif")); newimg = change(bi, new BufferedImage(100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE)); }catch(Exception e){ e.printStackTrace(); } } public void paint(Graphics g) { g.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 ; }

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.4

 こんにちは。  #2さんへ  Fileクラスではなく、URLクラスを使わないと、ウェブサーバーに上げたときに、うまくいかないのでは? BufferedImage bi = ImageIO.read(new File(getCodeBase()+ "a.gif"));     ↓ BufferedImage bi = ImageIO.read(new URL(getCodeBase().toString() + "a.gif"));

  • covachan
  • ベストアンサー率38% (46/120)
回答No.3

何でもかんでも投げるのはやめてください。 動作確認はできましたので最後のコメントを(狙いの動きかどうかはわかりませんが) エラーについてですが、画像はちゃんと読み込めてますか? パスを間違えていませんか? あと、 g2 = (Graphics2D)g ; の目的がわかりません。 以下の記述で画像は表示されました。 g.drawImage(newimg , 0 , 0 , null ) ; 後はご自分でがんばってください。

  • covachan
  • ベストアンサー率38% (46/120)
回答No.2

何をされたいのかわからないのでわかる範囲ですが、 srcimage0 = getImage( getDocumentBase() , "a.gif" ) ; srcimage1 = ( BufferedImage )srcimage0 ; newimg = change(srcimage1 , new BufferedImage(100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE)); は BufferedImage bi = ImageIO.read(new File(getCodeBase()+ "a.gif")); newimg = change(bi, new BufferedImage(100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE)); みたいな感じでは無理ですか?

htgotk_001
質問者

お礼

 回答有難うございます。  下のように書き換えてやりましたが、 //Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException //at BufferedImage1.paint(BufferedImage1.java:47) のようなエラーコメントが出て、 「newimg = change( bi , new BufferedImage( 100 ,100 ,BufferedImage.TYPE_4BYTE_ABGR_PRE ) ) ;」 の箇所で newimg がNULL値をとっています。 どこが悪いのでしょうか、宜しくお願いします。 ====================================================================== public class BufferedImage1 extends Applet { static BufferedImage srcimage1 , newimg ; static Image 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 = Toolkit.getDefaultToolkit().getImage("a.gif"); // srcimage1 = ( BufferedImage )srcimage0 ; // newimg = change(srcimage1 , new BufferedImage(100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE)) ; try { BufferedImage bi = ImageIO.read( new File(getCodeBase() + "a.gif" ) ) ; newimg = change( bi , new BufferedImage( 100 , 100 , BufferedImage.TYPE_4BYTE_ABGR_PRE ) ) ; } catch(Exception e){} } 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 ; } }

  • covachan
  • ベストアンサー率38% (46/120)
回答No.1

確認しましたが、何かいろいろと問題がありますね。 主さんのスキルでは問題解決は難しいと思いますが、 今回のポイントだけ書くと、 srcimage0 = getImage( getDocumentBase() , "a.gif" ) ; で取得できるオブジェクトの実体は私が確認した限り、 ToolkitImageでした。 ToolkitImageはImagaeのサブクラスですので、 同じImagaeのサブクラスであるBufferedImageへのキャストで失敗します。 で、どうすればいいかというと、そのままToolkitImageでコードを組み立てるか、 ToolkitImageからBufferedImageを再生成するしか現在のコードに合わせられないでしょう。

htgotk_001
質問者

お礼

>で、どうすればいいかというと、そのままToolkitImageでコードを組み立てるか、 >ToolkitImageからBufferedImageを再生成するしか現在のコードに合わせられないでしょう。 他の参考書を探してみましたが、よくわかりませんでした。 何とか教えて頂けないでしょうか。 宜しくお願いします。

関連するQ&A