2012-08-04 2 views
2

안드로이드 ndk를 사용하여 간단한 이미지 필터링을 시도하고 비트 맵의 ​​rgb 값을 가져 와서 설정하는 데 문제가있는 것 같습니다.Android NDK 세트 RGB 비트 맵 픽셀

나는 모든 실제 처리를 제거했으며 비트 맵의 ​​모든 픽셀을 빨간색으로 설정하려고했지만 대신 파란색 이미지로 끝납니다. 내가 간과 해 왔던 간단한 것이 있다고 가정하지만, 어떤 도움을 주시면 감사하겠습니다.

static void changeIt(AndroidBitmapInfo* info, void* pixels){ 
int x, y, red, green, blue; 

for (y=0;y<info->height;y++) { 


    uint32_t * line = (uint32_t *)pixels; 
     for (x=0;x<info->width;x++) { 

      //get the values 
      red = (int) ((line[x] & 0xFF0000) >> 16); 
      green = (int)((line[x] & 0x00FF00) >> 8); 
      blue = (int) (line[x] & 0x0000FF); 

      //just set it to all be red for testing 
      red = 255; 
      green = 0; 
      blue = 0; 

      //why is the image totally blue?? 
      line[x] = 
       ((red << 16) & 0xFF0000) | 
       ((green << 8) & 0x00FF00) | 
       (blue & 0x0000FF); 
     } 

     pixels = (char *)pixels + info->stride; 
    } 
} 

각 픽셀의 rgb 값을 어떻게 설정해야합니까 ??

static void changeIt(AndroidBitmapInfo* info, void* pixels){ 
int x, y, red, green, blue; 

for (y=0;y<info->height;y++) { 


    uint32_t * line = (uint32_t *)pixels; 
     for (x=0;x<info->width;x++) { 

      //get the values 
      blue = (int) ((line[x] & 0xFF0000) >> 16); 
      green = (int)((line[x] & 0x00FF00) >> 8); 
      red = (int) (line[x] & 0x0000FF); 

      //just set it to all be red for testing 
      red = 255; 
      green = 0; 
      blue = 0; 

      //why is the image totally blue?? 
      line[x] = 
       ((blue<< 16) & 0xFF0000) | 
       ((green << 8) & 0x00FF00) | 
       (red & 0x0000FF); 
     } 

     pixels = (char *)pixels + info->stride; 
    } 
} 

답변

2

그것은에 따라 달라집니다
으로는 그 아래에 지적 대답에

업데이트 내 원래의 코드에서 난 그냥 빨간색과 파란색 변수를 전환했다, 그래서 리틀 엔디안이 사용되는 것을 보인다 픽셀 형식. 아마도 귀하의 비트 맵은 RGBA입니다. 따라서 0x00FF0000은 투명도가 0 인 파란색 0x00, 0x00, 0xFF, 0x00 (리틀 엔디안)에 해당합니다.

저는 Android 개발자가 아니므로, AndroidBitmapInfo.format 필드를 기반으로 색상 구성 요소를 설정하거나 직접해야하는 경우 API 문서를 읽어야합니다.

+0

내가 잘못하지 않는 한 비트 맵이 ARGB라고 생각합니다. 위의 코드는 SDK가 아닌 NDK (기본 개발 키트)이므로 실제로 C 코드입니다. –