java - Android快速位图绘制

标签 java android bitmap android-canvas android-bitmap

我需要优化这部分代码,该部分消耗约 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);
    }

我不习惯 native 代码,因此如果有标准代码方法可以提高此性能,我宁愿不使用它。 我认为代码非常不言自明 NormalizeBmp 创建一个包含要使用的灰色调的 160x120 整数数组。我可以轻松更改 NormalizeBmp 以产生不同的颜色输出。

最佳答案

您可以直接从 NormalizeBmp() 返回的数据创建位图,而不是在 Canvas 上逐像素绘制。您所需要的只是修改返回的 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). 绘制位图

关于java - Android快速位图绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708663/

相关文章:

Java:使用拆分从文件输入文本

java - google app engine java的应用监控

java - 如何在 Android 上管理位图的内存?

android - 将 View 转换为位图而不在 Android 中显示?

java - 从列表中删除几乎相同的字符串(名词复数形式)

java - fragment 内的菜单未被调用

android - 在 android 平板电脑上编写脚本以进行简单的文本分析和离散模拟

android - 在 Android 的 ListView 中更改按钮的文本

java - 即使已经安装了新版本,Eclipse 中也会出现旧的 JRE 版本错误

android - 如何获取提供 URI 的位图,java.io.FileNotFoundException : No content provider:/sdcard/Hello/1310610722879. jpg