Android 快速位图绘制
Android fast bitmap drawing
我需要优化这部分消耗大约 70 毫秒的代码(在我的 Samsung Galaxy Tab S2 - Android 7.0 上):
private static final int IR_FRAME_WIDTH = 160;
private static final int IR_FRAME_HEIGHT = 120;
...
final int[] bmp_data = NormalizeBmp(image_data, IR_FRAME_WIDTH, IR_FRAME_HEIGHT, Polarity.WhiteHot);
Bitmap bitmap = Bitmap.createBitmap(IR_FRAME_WIDTH, IR_FRAME_HEIGHT, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, 0, 0, null);
final Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
for (int y = 0; y < IR_FRAME_HEIGHT; y++)
for(int x = 0; x < IR_FRAME_WIDTH; x++) {
final int _gray = bmp_data[(y * IR_FRAME_WIDTH) + x];
paint.setColor(Color.rgb(_gray, _gray, _gray));
canvas.drawPoint(x, y, paint);
}
我不习惯使用本机代码,所以如果有标准代码方法可以提高此性能,我宁愿不使用它。
我认为代码很容易解释 NormalizeBmp
创建一个包含要使用的灰色调的 160x120 整数数组。我可以轻松更改 NormalizeBmp
以产生不同的颜色输出。
无需在 canvas 上逐个像素地绘制,您可以做的是直接从 NormalizeBmp() 返回的数据创建位图。您只需修改返回的 int 数组以将颜色打包为 RGB 格式。由于您使用相同的颜色将 Paint() 设置为 RGB,因此这将非常简单。这里有一个简单的颜色打包方法:
retVal[i] = (0xFF << 24) | (retVal[i] & 0xFF)<< 16 | (retVal[i] & 0xFF) << 8 | retVal[i]
然后使用修改后的数组绘制位图使用Bitmap.Create(int[] colors, width, height, bitmap_format).
我需要优化这部分消耗大约 70 毫秒的代码(在我的 Samsung Galaxy Tab S2 - Android 7.0 上):
private static final int IR_FRAME_WIDTH = 160;
private static final int IR_FRAME_HEIGHT = 120;
...
final int[] bmp_data = NormalizeBmp(image_data, IR_FRAME_WIDTH, IR_FRAME_HEIGHT, Polarity.WhiteHot);
Bitmap bitmap = Bitmap.createBitmap(IR_FRAME_WIDTH, IR_FRAME_HEIGHT, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, 0, 0, null);
final Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
for (int y = 0; y < IR_FRAME_HEIGHT; y++)
for(int x = 0; x < IR_FRAME_WIDTH; x++) {
final int _gray = bmp_data[(y * IR_FRAME_WIDTH) + x];
paint.setColor(Color.rgb(_gray, _gray, _gray));
canvas.drawPoint(x, y, paint);
}
我不习惯使用本机代码,所以如果有标准代码方法可以提高此性能,我宁愿不使用它。
我认为代码很容易解释 NormalizeBmp
创建一个包含要使用的灰色调的 160x120 整数数组。我可以轻松更改 NormalizeBmp
以产生不同的颜色输出。
无需在 canvas 上逐个像素地绘制,您可以做的是直接从 NormalizeBmp() 返回的数据创建位图。您只需修改返回的 int 数组以将颜色打包为 RGB 格式。由于您使用相同的颜色将 Paint() 设置为 RGB,因此这将非常简单。这里有一个简单的颜色打包方法:
retVal[i] = (0xFF << 24) | (retVal[i] & 0xFF)<< 16 | (retVal[i] & 0xFF) << 8 | retVal[i]
然后使用修改后的数组绘制位图使用Bitmap.Create(int[] colors, width, height, bitmap_format).