2014-10-10 1 views
0

Здравствуйте, я пытаюсь найти ширину и высоту изображения BMP, используя только побитовые операторы. Это то, что я пробовал до сих пор.Поиск ширины и высоты изображения bmp с помощью побитовых операторов

for (i = 0; i <= 3; i++) 
    { 
     width = file_data[i + 18] | width << 8; 
     height = file_data[i + 22] | height << 8; 
    } 

Это то, что я знаю. Ширина находится в байтах 19, 20, 21 и 22. Байт 19 представляет собой младший байт, за которым следуют 20, затем 21 и байт 22, который является байтом высокого порядка.

Высота высота находится в байтах 23, 24 25 и 26. Байт 23 представляет собой младший байт, за которым следуют 24, затем 25 и байт 26, который является байтом высокого порядка.

ширина и высота - это ints.

Update -------- ширина и высота файла им в настоящее время работает с 298 является на 432 , когда я использую

for (i = 0; i <= 3; i++) 
    { 
     width = file_data[21 - i] | width << 8; 
     height = file_data[25 - i] | height << 8; 
    } 

при запуске программы я получаю 298 от - 80

+0

Почему вы так делаете? Скопируйте данные в структуру BITMAPINFO и получите доступ к полям напрямую. –

+0

Я хочу попрактиковаться с побитовыми операторами. – john

ответ

0

Ваш код обратный, хотя ваше описание будет корректным. file_data[18] является наименее значимым байтом ширины растрового изображения, но вы помещаете его как самый старший байт в свою переменную width. То же самое касается height. Либо измените цикл на обратный отсчет, либо измените индексирование, чтобы вычесть вместо добавления.

+0

Я пробовал эту width = file_data [21 - i] | ширина << 8; height = file_data [25 - i] | высота << 8; Он не работает – john

+0

@john: Каков тип 'width',' height' и 'binary_data'? Еще лучше, в своем посте, пожалуйста, предоставьте полный, компилируемый пример, демонстрирующий проблему. –

+0

Извините, я думал и печатал свои файлы file_data с данными, содержащимися в файле. ширина и высота - ints. – john