Эй, ребята!
Я получил это 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
}
}
}
Заранее спасибо!
Вы почти наверняка интерпретируете / выводите биты в неправильном порядке в каждом байте. Это приводит к тому, что каждый столбец из 8 пикселей переворачивается слева направо.
Формат BMP утверждает, что самый левый пиксель является самый значительный бит, и самый правый пиксель является наименее. В вашем коде вы перебираете биты неправильно.
Других решений пока нет …