Формат файла BMP не читается правильно?

Эй, ребята!

Я получил это image.bmp.
Когда я читаю это со всеми включенными дополнениями и таким, я получаю этот результат.

Что я делаю здесь не так, кроме чтения изображения с ног на голову? Я не нахожу ничего относительного в Википедии или в Google. Кажется, что после ширины 24 пикселя изображение зеркально отображается на 8 пикселях. Зачем!? Я не понимаю !? Как я могу это исправить!?

Я читаю файл с некоторым кодом C ++ в Windows, читая файл BMP raw.
Файл изображения монохромный. 1 бит на пиксель.

Код для отображения растровых данных:

unsigned int count = 0; // Bit counting variable
unsigned char *bitmap_data = new char[size]; // Array containing the raw data of the image

for(unsigned int i=0; i<size; i++){ // This for-loop goes through every byte of the bitmap_data

for(int j=1; j<256; j*=2){ // This gives j 1, 2, 4, 8, 16, 32, 64 and 128. Used to go through every bit in the bitmap_data byte

if(count >= width){ // Checking if the row is ended
cout << "\n"; // Line feed

while(count > 32) count -=32; // For padding.
if(count < 24) i++;
if(count < 16) i++;
if(count < 8) i++;

count = 0; // resetting bit count and break out to next row
break;
}

if(i>=size) break; // Just in case

count++; // Increment the bitcounter. Need to be after end of row check

if(bitmap_data[i] & j){ // Compare bits
cout << (char)0xDB; // Block
}else{
cout << (char)' ';  // Space
}
}
}

Заранее спасибо!

2

Решение

Вы почти наверняка интерпретируете / выводите биты в неправильном порядке в каждом байте. Это приводит к тому, что каждый столбец из 8 пикселей переворачивается слева направо.

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector