Android快速位图绘制

问题描述 投票:0回答:1

我需要优化这部分大约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以产生不同的颜色输出。

java android bitmap android-canvas android-bitmap
1个回答
0
投票

您可以直接从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).绘制位图

© www.soinside.com 2019 - 2024. All rights reserved.