10/05/09 21:02:07 Pu1jTf/z
転送元がImageということはどういうフォーマットになっているかわからないってことかな。
描画バッファから画面への転送の方法とかどうしているかも気になる。
あとはピクセルフォーマットを同設定しているかか。
転送もとのフォーマット
描画バッファのフォーマット
画面のフォーマット
これらをどう設定しているかにもよる。
あとImageの分割もやってみた?32bppだと1000*1000で4MBも食うわけで。
174:名前は開発中のものです。
10/05/09 21:14:11 o2jE/Yfm
もうハードウェアアクセラレーションが効く環境に変えちゃえばいいのに
アホみたいに速いよw
175:名前は開発中のものです。
10/05/09 22:56:26 eCAtLDK5
>>168
カラーが24bitなら透過は8bitになってると思うよ
そして全ての透過値が0xffか0x00しかなくても、8bitのアルファチャネルがあるのと同様のロジックが走る
アクセラレーションが効いてなければ結構描画効率は落ちる
マリオみたいなゲームなら1チップに255色以上使う必要性も少ないだろうし、
リソース合成時かゲーム起動時に減色して透過インデックスを指定するようにしたらどうかな
176:168
10/05/10 01:29:54 CH9wxDuw
皆さんありがとうございます。
URLリンク(javagame.skr.jp)
に書いてある、repaint()を使わないで描画する方法(アクティブレンダリング)というのをやってみたら大分カクカクが収まりました。
>>173
すいません、勉強不足で仰られていることの意味がわからないんでコード晒します。
>>168からいろいろ変えてみて、今現在、
Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(filename));
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
BufferedImage bimg= new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = bimg.createGraphics();
g.drawImage(img,0,0,null);
でpng画像をbimgに読み込んだ後、drawImageでオフスクリーンバッファに描画してます。
画面への転送方法は先程も書きましたがrepaint()を使わない方法に変えてみました。
あと、画像を最初にBufferedImageで読み込んでいても、チップは分割しておいたほうがいいですか?
>>174 すいません、軽く調べましたがなんか難しそうなので諦めます。
>>175 そうなんですか。うーん、どうしてもフルカラーでいきたいんですよね…。無理そうならgifに戻すことにします。
177:名前は開発中のものです。
10/05/10 22:09:49 rdBA97qw
画像のロードは遅延読み込みやりたいわけじゃないならImageIOつかうとよいよ。転送待ちをする必要ないし。
あとABGRとかARGBとか順番によって大きく速度が変わるからピクセルフォーマットは意識したほうがよい。
転送先はVRAM、もしくはコンパチブルピクセルフォーマットのほうがいいよ。
そして転送元もあわせたほうがよい場合が多い。
あとは特定色の透過をしたい場合TransparencyがBITMASKになってると大概早いはず。
178:名前は開発中のものです。
10/05/11 10:35:00 RB0dCl6F
初級って書いてあるから開いてみたけど
話が難しすぎてさっぱりわからないwww
ダメだ俺orz