我有一个相当大数量的小位图(100+,大小约为40x40),每个都有一些不透明和一些透明部分,我需要来画他们尊重这些地区。绘制带有alpha通道的位图:请指教...(某些解决方案和速度问题)
位图是ARGB格式,888(rgb)加上一个256位alpha通道,标准像PNG格式。
唯一(工作)的方式,我发现绘制这些是以下的方法:
- 创建位图(ARGB_8888)
- 填充位图与所述原始数据
- 提取从阿尔法层在原有基础上的位图
位图
- 创建BitmapShader(RGB_565)创建它使用着色器创建位图漆
然后使用具有特殊BitmapShader的颜料绘制alpha蒙版。
初始化代码只运行一次,当然:
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)这样的手机上,它运行平稳顺畅,但在其他手机(如顶级三星Galaxy SII(Android 2.3))上,它蹩脚而缓慢。这对我来说没有什么意义......
那么,您如何看待这种方法呢?有更好,更快的方法来达到相同的结果吗?
而且,您为什么认为它在现代,快速的硬件上太慢了?有什么方法可以改善它吗?