質問

私は、次のコード(私が思うに、それが作成されたかは関係ありません)で作成した透明BufferedImageを持っています

            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();

            Rectangle screen = transformationContext.getScreen();

            // Create an image that supports transparent pixels
            return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
                    Transparency.BITMASK);

私はイメージを再作成することなく、最速の方法で画像(それが作成されたのと同じ状態で空の画像)可能性をクリアするにはどうすればよいですか? VMを一時停止し、UIを凍結、画像プットにGCの負担を再現ます。

役に立ちましたか?

解決

ガットそれ:)使用clearRectの代わりに透明色で塗ります。

            graphics = (Graphics2D) offlineBuffer.getGraphics();
            graphics.setBackground(new Color(255, 255, 255, 0));
            Rectangle screen = transformationContext.getScreen();
            graphics.clearRect(0,0, (int)screen.getWidth(), (int)screen.getHeight());

他のヒント

一つの比較的高速な方法、それは最速だ場合、私は知らない(と私は他の答えを見てみたいと思いますが)あなたが変更しないことを別の画像を持つことである、それは常に/「完全に透明「完全にクリア」であります「そしてあなたは、ラスタのコピーを行い、CLEARをコピーし、あなたが名前の言うます:

imageYouWantToClear.setData( CLEAR.getRaster() );

ではない、非常に-よく文書行動が多いので、それがパフォーマンスに来るとき、グラフィックスでの作業は非常にトリッキーなことができることを注意を。たとえば、あなたのイメージ(CLEAR 1を言う)<全角> のかもしれない、ハードウェアアクセラレーションすることができますが、すぐに(のようなのSetRGBは言う(変異メソッドを使用したいようなハードウェア・アクセラレーション、その後失うだろう)の)、それはあなただけのハードウェアアクセラレーションの恩恵を失ったことを認識することが非常に困難証明する。

私はパフォーマンスのBufferedImageをテーマにに関する情報を見つける最適な場所は、JavaのゲームプログラマーとJavaゲーム-API-プログラマコミュニティ/フォーラムにあるであろうと思います。

ところで、あなたのBufferedImageの両方が「互換」モードを使用していることを確認してください:あなたは彼らのようなものをやって作成したいので、TYPE_INT_ARGBは、Windows上で罰金ではなく、などOS X、上のことがあります:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

痛い法律・オブ・デメテルが痛い、感謝のJava;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top