2013-05-08 2 views
0

Im'm загружает цвет пикселя и записывает однобайтную переменную. Когда я хочу прочитать этот цвет (для красного пикселя), получим результат: 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

*** Dat kast from 'void *' !!! *** – 2013-05-08 18:18:08

+0

Ваш спецификатор формата для 'printf()' недействителен и приводит к неопределенному поведению. Флаг '' L '' действителен только для спецификаторов преобразования a, A, e, E, f, g или G и сообщает 'printf()', что аргумент является 'long double'. Попробуйте изменить это на 'printf ("% d \ n ", данные [0 -] [1] .R)' и посмотреть, что произойдет. –

ответ

0

char, как представляется знаковым типом на вашей машине. Используйте unsigned char, чтобы избежать расширения знака.

Смежные вопросы