2013-05-08 2 views
0

픽셀의 색상을로드하고 1 바이트 변수를 씁니다. 이 색상 (빨강 픽셀 용)을 읽으 려 할 때 결과는 255입니다. 그러나 값은 4294967296입니다.이 값은 32 바이트 변수에 기록 된 것입니다. 왜 이런 일이 생길까요?C 비트 맵에서 색상 읽기

struct RGBpix{ 
char R; 
char G; 
char B; 
}typedef RGB; 

...

RGB **data=(RGB **)malloc(sizeof(RGB *)*Picture.biWidth); 
    for(i = 0; i < Picture.biWidth; i++){ 
     data[i] = (RGB*) malloc(sizeof(RGB) *Picture.biHeight); 
    } 

...

for(i=0;i<Picture.biWidth;i++){ 
     for(j=0;j<Picture.biHeight;j++){ 

     fread(&data[i][j].R, 1, 1,bmpFile); 
     fread(&data[i][j].G, 1, 1,bmpFile); 
     fread(&data[i][j].B, 1, 1,bmpFile); 
     } 

    } 
    printf("%Ld", data[0][1].R); 
+1

***'void *'!!! *** –

+0

의 데이터 형식은'printf()'의 형식 지정자가 잘못되어 정의되지 않은 동작이됩니다. ''L' '플래그는 a, A, e, E, f, F, g 또는 G 변환 지정자에서만 유효하며'printf()'에 인수가'long double'임을 알립니다. 그것을'printf ("% d \ n", data [0 -] [1] .R)'로 바꾸고 어떻게되는지보십시오. –

답변

0

char은 당신의 컴퓨터에 서명 유형으로 나타납니다. 부호 확장을 피하려면 unsigned char을 사용하십시오.