こんにちは。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 ;
}
}
No.7
- 回答日時:
#6さん
あ、すみません。
ウェブ上ということだったのですね。
私はローカルファイルでしか試していません。
ローカルの画像を読み込む感じです。
そもそも、どこの画像を使うかなんて
質問にないですし、処理の書き方の問題ですので
そこで意見を言われても正直参りますし、意味はないでしょう?
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クラスを使うのは、問題が残るのではないでしょうか?
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 ;
}
No.4
- 回答日時:
こんにちは。
#2さんへ
Fileクラスではなく、URLクラスを使わないと、ウェブサーバーに上げたときに、うまくいかないのでは?
BufferedImage bi = ImageIO.read(new File(getCodeBase()+ "a.gif"));
↓
BufferedImage bi = ImageIO.read(new URL(getCodeBase().toString() + "a.gif"));
No.3
- 回答日時:
何でもかんでも投げるのはやめてください。
動作確認はできましたので最後のコメントを(狙いの動きかどうかはわかりませんが)
エラーについてですが、画像はちゃんと読み込めてますか?
パスを間違えていませんか?
あと、
g2 = (Graphics2D)g ;
の目的がわかりません。
以下の記述で画像は表示されました。
g.drawImage(newimg , 0 , 0 , null ) ;
後はご自分でがんばってください。
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));
みたいな感じでは無理ですか?
回答有難うございます。
下のように書き換えてやりましたが、
//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 ;
}
}
No.1
- 回答日時:
確認しましたが、何かいろいろと問題がありますね。
主さんのスキルでは問題解決は難しいと思いますが、
今回のポイントだけ書くと、
srcimage0 = getImage( getDocumentBase() , "a.gif" ) ;
で取得できるオブジェクトの実体は私が確認した限り、
ToolkitImageでした。
ToolkitImageはImagaeのサブクラスですので、
同じImagaeのサブクラスであるBufferedImageへのキャストで失敗します。
で、どうすればいいかというと、そのままToolkitImageでコードを組み立てるか、
ToolkitImageからBufferedImageを再生成するしか現在のコードに合わせられないでしょう。
>で、どうすればいいかというと、そのままToolkitImageでコードを組み立てるか、
>ToolkitImageからBufferedImageを再生成するしか現在のコードに合わせられないでしょう。
他の参考書を探してみましたが、よくわかりませんでした。
何とか教えて頂けないでしょうか。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java final 1 2022/06/10 22:49
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java eclipse実行ができない 2 2022/07/27 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C#.net]スレッド化された別フ...
-
Javaでパラパラアニメを作成す...
-
大量のデータを読み込んで表示...
-
数独の問題作成
-
ボタンのイベントで異なるウィ...
-
【java】座標の値をテキストフ...
-
Thread.sleepのInterruptedExce...
-
Junitテストでvoid戻り値メッソ...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
javaアプレット repaintのタイ...
-
C# DataGridView列カスタマイズ
-
【javaアプレット】スクロール...
-
C# 半角カナの文字化けについて
-
ペイントソフトを作っているの...
-
二分探索木の要素の数を数える...
-
Processingでマウスクリックで...
-
struts2のchainで値の受け渡し...
-
C# タスク非表示でタイトルバー...
-
JWindow、JFrameでモーダル化の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報