gpt4 book ai didi

c++ - BMP 文件格式无法正确读取?

转载 作者:搜寻专家 更新时间:2023-10-31 01:11:08 25 4
gpt4 key购买 nike

大家好!

我知道了 image.bmp .当我阅读包含所有填充的内容时,我得到 this结果。

除了颠倒阅读图像之外,我在这里做错了什么?我在维基百科或谷歌搜索上找不到任何相关内容。似乎在 24 像素宽度后,图像被镜像为 8 像素。为什么!?我不明白!?我该如何解决这个问题!?

我在 Windows 上读取带有一些 C++ 代码的文件,读取原始的 BMP 文件。图像文件是单色的。每像素 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 格式声明最左边的像素是最高 有效位,最右边的像素是最低。在您的代码中,您以错误的方式迭代这些位。

关于c++ - BMP 文件格式无法正确读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com