Mi aplicación Android Tide muestra una carta náutica de un archivo .KAP. Este formato de archivo utiliza un sistema de visualización paletizado de cuatro bits, solo se utilizan 10 colores. Mi aplicación decodifica el formato de archivo en una matriz de colores de cuatro bits. Muestra una parte de esta matriz en la pantalla de la siguiente manera:
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);Hay 10 colores de pintura preestablecidos con los códigos RGB necesarios para la visualización. Pero cada píxel debe dibujarse individualmente con la función displayCanvas.drawPoint. Esto funciona pero es PERRO LENTO. Preferiría preestablecer los códigos de la paleta en el otro lado de la llamada de visualización y pasar los valores de la paleta en su lugar. Esto se ejecutaría mucho más rápido, pero no puedo encontrar una manera de hacerlo con las llamadas de visualización disponibles. Hay funciones de Android para evaluar una imagen para obtener una paleta, etc., pero no veo cómo mostrar de manera eficiente una imagen paletizada. Cada píxel se expande de un código de píxel de cuatro bits a un código RGB565 de dieciséis bits para pasar un mapa de bits normal. ¿De qué otra manera podría hacer esto, gracias.
Para definir los píxeles de un mapa de bits, no debe usar un lienzo porque agrega una capa adicional y es ineficiente. Debe tratar directamente con el objeto de mapa de bits. Hay dos maneras de hacerlo.
El método setPixel() permite establecer el color de un píxel.
Ejemplo:
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); } Para evitar la sobrecarga de llamar a setPixel() una gran cantidad de veces, puede crear una matriz con los colores de los píxeles y pasarla directamente a createBitmap() . Esta es probablemente la manera más eficiente.
Ejemplo:
int length = width * height; int[] colors = new int[length]; for(int i = 0; i < length; i++) colors[i] = Color.BLUE; Bitmap bm = Bitmap.createBitmap(colors, width, height, Bitmap.Config.ARGB_8888);