2010-01-12 5 views
4

J'ai des données d'image en tableau byte rgb_565, et je veux le convertir de manière productive en tableau argb. En ce moment, je l'ai trouvé qu'un seul (peu lent) façon de le faire:Android - convertir byte rgb_565 tableau en argb ou tableau rgb

Bitmap mPhotoPicture = BitmapFactory.decodeByteArray(imageData, 0 , imageData.length); 

imageData est mon tableau byte[] dans rgb_565, puis:

int pixels[] = new int[CameraView.PICTURE_HEIGHT*CameraView.PICTURE_WIDTH]; 
mPhotoPicture.getPixels(pixels, 0,PICTURE_WIDTH, 0, 0, PICTURE_WIDTH, PICTURE_HEIGHT); 

Le point est je crois de créer un Bitmap objet est exigeant et pas nécessaire dans ce cas. Existe-t-il un autre moyen plus rapide de convertir le tableau rgb_565 en tableau argb? J'ai besoin de cela car le traitement d'image sur le tableau rgb_565 semble être un peu ennuyeux. Ou peut-être que ce n'est pas si difficile?

Répondre

6

Pourquoi ne pas le faire à la main? Une table est dans mon expérience la plus rapide:

C-code:

static unsigned char rb_table[32]; 
static unsigned char g_table[64]; 

void init (void) 
{ 
    // precalculate conversion tables: 
    int i; 
    for (i=0; i<32; i++) 
    rb_table[i] = 255*i/31; 
    for (i=0; i<64; i++) 
    g_table[i] = 255*i/63; 
} 


void convert (unsigned int * dest, unsigned short * src, int n) 
{ 
    // do bulk data conversion from 565 to rgb32 
    int i; 

    for (i=0; i<n; i++) 
    { 
    unsigned short color = src[i]; 

    unsigned int red = rb_table[(color>>11)&31]<<16; 
    unsigned int green = g_table[(color>>5)&63]<<8; 
    unsigned int blue = rb_table[color&31]; 

    dest[i] = red|green|blue; 
    } 
} 
Questions connexes