繁体   English   中英

如何在 Android 图形中有效地创建托盘化 colors 的显示 bitmap?

[英]How can I efficiently create a display bitmap of palletized colors in Android graphics?

我的 Android Tide 应用程序显示来自 .KAP 文件的海图。 此文件格式使用四位调色板显示系统,仅使用 10 个 colors。 我的应用程序将文件格式解码为四位 colors 的数组。 它将这个数组的一部分显示在显示器上,如下所示:

for (displayLineNum  = 1; displayLineNum < displayHeight; displayLineNum++)
{   for (displayDotNum = 1; displayDotNum < displayWidth; displayDotNum++)
   {  color = colors [lineIndex-1][dotIndex-1];  
      switch (color)
      {   case 1:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color1); break;
          case 2:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color2); break;
          case 3:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color3); break;
          case 4:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color4); break;
          case 5:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color5); break;
          case 6:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color6); break;
          case 7:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color7); break;
          case 8:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color8); break;
          case 9:  displayCanvas.drawPoint(displayDotNum, displayLineNum, color9); break;
          case 10: displayCanvas.drawPoint(displayDotNum, displayLineNum, color10); break;
          default: displayCanvas.drawPoint(displayDotNum, displayLineNum, color1); break;                    
      }
   }
}
display_area.setImageBitmap(displayBitmap);

有 10 种油漆 colors 预先设置了显示所需的 RGB 代码。 但是每个像素都必须使用 displayCanvas.drawPoint function 单独绘制。 这行得通,但它是狗慢。 我宁愿在显示调用的另一端预先设置调色板代码,而是传入调色板值。 这会运行得更快,但我找不到可用显示调用的方法。 有 Android 函数来评估图像以获得调色板等,但我看不出如何有效地显示调色板图像。 每个像素都被 4 位像素代码放大为 16 位 RGB565 代码,以便传入正常的 bitmap。 我怎么能这样,谢谢。

要定义 Bitmap 的像素,不应使用 Canvas,因为它添加了额外的层并且效率低下。 您应该直接处理 Bitmap object。 有两种方法可以做到这一点。

调用 setPixel

setPixel()方法允许设置像素的颜色。

例子:

Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
for(int x = 0; x < width; x++)
{
    for(int y = 0; y < height; y++)
        bm.setPixel(x, y, Color.BLUE);
}

将像素 colors 传递给构造函数

为避免多次调用setPixel()的开销,您可以使用像素 colors 构建一个数组,然后直接将其传递给构造函数 这可能是最有效的方式。

例子:

int length = width * height;
int[] colors = new int[length];
for(int i = 0; i < length; i++)
    colors[i] = Color.BLUE;
Bitmap bm = new Bitmap(colors, width, height, Bitmap.Config.ARGB_8888);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM