緩衝画像を用いずに、アルファチャネルを使用したJava画像

StackOverflow https://stackoverflow.com/questions/2273730

  •  20-09-2019
  •  | 
  •  

質問

Canvasにタイルの束を描くIM、これらのタイルはImages又はBufferedImagesのいずれかで表されます。

私は気づいたイムなっミリ秒Imagesで引き分けたが、私は上記の20msにタイルのためのフレーム時間の空のロケットをBufferedImagesを使って何を開始します。

BufferedImage buffered = ImageIO.read(new File(fileName));
Image image = Toolkit.getDefaultToolkit().createImage(fileName);

これらの画像の両方がアルファチャンネルをサポートします。私は、仲介バッファのImage年代が可能なアルファの使用を開始したいと思います。しかし、私は、ファイルから1を作成するには、このツールキットのコール以外それらを生成することができ、JDKで場所を見つけたhaventます。

基本的には誰もがアルファをサポートすることができ、最初から空白画像(ないBufferedImageを)作成する方法を知っていますか?

役に立ちましたか?

解決

直接あなたの質問に答えるために:

// Create a empty BufferedImage which supports alpha
// It will be just as fast a Toolkit image
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

いくつかの背景:

これは、すべてあなたが使っているのBufferedImageのTYPEまで来ています。 BufferedImageのは、あなたがTYPE(INT_ARGB、4BYTE_ARGBなど)specifiy可能なコンストラクタを提供しています。 ImageIOでを使用するときは、BufferedImageの建設に使用されますタイプを制御できません。 ImageIOには、カスタムである「0」を入力し使用しています。 TYPEは、画像データは、画像を描画する方法/コピー/スクリーン(または他の画像)にブリットに重く果たしてメモリにアクセス/格納されている方法を支配する。

私はあなたのコードに基づいて簡単なテストを作成したBufferedImageは常に非常にゆっくりとレンダリングします。私はTYPE_INT_ARGBと第BufferedImageを作成し、そこに(ImageIOにから)最初のBufferedImageをコピーしました。このTYPE_INT_ARGBのBufferedImageは、ツールキットの画像と同じ速度でレンダリングします。

他のヒント

あなたが好きなコンテンツを備えたImageオブジェクトを作成するには、旧たImageConsumer / ImageProducerをAPIを使用することができます。

これは、所定の幅と高さpixアレイ内ARGBピクセルからイメージオブジェクトを作成します。

public static Image createImage( int width, int height, int[] pix )
{
    return createImage( width, height, pix, 0, width );
}

public static Image createImage( int width, int height, int[] pix, int offs, int scan )
{
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    ImageProducer source = new MemoryImageSource( width, height, pix, offs, scan );
    return toolkit.createImage( source );
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top