小さなビットマップ(100+、サイズ約40x40)がかなりあります。それぞれ不透明で透明な部分がいくつかあります。これらの分野を尊重して描くアルファチャンネルを使用したビットマップ描画:
ビットマップはARGB形式で、888(rgb)と256ビットアルファチャンネル(PNG形式のような標準)です。私はそれらを描画するために見つけ
のみ(作業)の方法は、次のようなアプローチである。
- ビットマップ(ARGB_8888)
- を作成した生データ
- でビットマップを埋めるからアルファ層を抽出元のビットマップ
に基づいて、ビットマップ
- BitmapShader(RGB_565)を作成するには、作成したシェーダを使用して、ビットマップ用の塗料を作成し
次に、特別なBitmapShaderを使用してペイントを使用してアルファマスクをペイントします。
void initializeTile(int t){ // Allocate the bitmap: Bitmap original_data = Bitmap.createBitmap(tile_w, tile_h, Bitmap.Config.ARGB_8888); // Fill with raw data (this is actually native C++ code): populateBitmap(original_data); // Get the alpha mask: tile_mask[ t ] = original_data.extractAlpha(); // Create the bitmap shader: tile_data = original_data.copy(Bitmap.Config.RGB_565, false); // Create the shader: BitmapShader shader = new BitmapShader(tile_data, CLAMP, CLAMP); // Create the paint: tile_paint[ t ] = new Paint(); tile_paint[ t ].setDither(true); tile_paint[ t ].setAntiAlias(true); tile_paint[ t ].setFilterBitmap(true); tile_paint[ t ].setShader(shader); }
、ペイントコードは最も簡単なことができ、メインドローループにあります:
初期化コードはもちろん、一度だけ実行され
void paintTile(t){
canvas.drawBitmap(tile_mask[ t ], tile_x[ t], tile_y[ t], tile_paint[ t]);
}
今、Ideos(Android 2.2)のような携帯電話では滑らかで上手く走りますが、トップエンドのSamsung Galaxy SII(Android 2.3)のような他の携帯電話では、それは嘘つきで遅いです。これは私にはあまり意味がありません...
このアプローチについてどう思いますか?同じ結果を達成するためのより良い、より速い、方法がありますか?
そして、近代的で高速なハードウェアではなぜそれほど遅いと思いますか?それを改善する方法はありますか?