2012-02-28 2 views
0

SDL_GetRGBA를 사용하여 이미지 픽셀의 RGBA 값을 표시하려고하는데 작동하지 않습니다. 여기에 내 코드 및 출력 :SDL_GetRGBA에 문제가 있습니다.

#include <stdio.h> 
#include <SDL/SDL.h> 

int main() { 
    SDL_Surface *screen; 
    SDL_Surface *image; 

    SDL_Init(SDL_INIT_VIDEO); 

    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    image = SDL_LoadBMP("testimg2.bmp"); 

    Uint32 i,j; 
    Uint8 r, g, b, a; 
    Uint8 *p = (Uint8 *) image->pixels; 
     for (i=0; i < 300; i++) { 

      for (j=0; j < 4; j++) 
       printf("i = %u, image->pixels[i*4+%u] = %u\n", i, j, p[i*4+j]); 

     SDL_GetRGBA(i, image->format, &b, &g, &r, &a); 
     printf("i = %u, r = %u, g = %u, b = %u, a = %u\n", i, r, g, b, a); 
    } 

    SDL_BlitSurface(image, NULL, screen, NULL); 
    SDL_Flip(screen); 
    SDL_Delay(2000); 

    SDL_FreeSurface(image); 
    SDL_Quit(); 
    return 0; 
} 

i = 0, image->pixels[i*4+0] = 0 
i = 0, image->pixels[i*4+1] = 0 
i = 0, image->pixels[i*4+2] = 255 
i = 0, image->pixels[i*4+3] = 133 
i = 0, r = 0, g = 0, b = 0, a = 255 
i = 1, image->pixels[i*4+0] = 0 
i = 1, image->pixels[i*4+1] = 0 
i = 1, image->pixels[i*4+2] = 255 
i = 1, image->pixels[i*4+3] = 140 
i = 1, r = 1, g = 0, b = 0, a = 255 
i = 2, image->pixels[i*4+0] = 0 
i = 2, image->pixels[i*4+1] = 0 
i = 2, image->pixels[i*4+2] = 255 
i = 2, image->pixels[i*4+3] = 132 
i = 2, r = 2, g = 0, b = 0, a = 255 
i = 3, image->pixels[i*4+0] = 0 
i = 3, image->pixels[i*4+1] = 0 
i = 3, image->pixels[i*4+2] = 255 
i = 3, image->pixels[i*4+3] = 118 
i = 3, r = 3, g = 0, b = 0, a = 255 
i = 4, image->pixels[i*4+0] = 0 
i = 4, image->pixels[i*4+1] = 0 
i = 4, image->pixels[i*4+2] = 255 
i = 4, image->pixels[i*4+3] = 114 
i = 4, r = 4, g = 0, b = 0, a = 255 
i = 5, image->pixels[i*4+0] = 0 
i = 5, image->pixels[i*4+1] = 0 
i = 5, image->pixels[i*4+2] = 255 
i = 5, image->pixels[i*4+3] = 115 
i = 5, r = 5, g = 0, b = 0, a = 255 

그래서 모든 것을 수동으로 바이트 픽셀 어레이 바이트를 통과 할 때 올바른 것으로 보인다는하지만, SDL_GetRGBA 함수가 잘못된 값을 반환 할 것으로 보인다. 내가 뭘 잘못하고 있는지 모르겠다. SDL에서

답변

0

:

SDL_GetRGBA(i, image->format, &b, &g, &r, &a); 

문서와 일치하지 않는 블루 그린, 레드의 주문이 아마 당신의 블루스에있을 당신의 빨강의 원인이되고 :

void SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); 

당신은이 당신의 블루스에서 당신의 블루스.

관련 문제