gpt4 book ai didi

c++ - 位图显示不正确

转载 作者:行者123 更新时间:2023-11-27 23:11:37 24 4
gpt4 key购买 nike

tagBITMAPFILEHEADER bh;
BITMAPINFOHEADER bih;
char buf[3];
unsigned char bmp[200][600];
int width ,height;
ifstream fin(L"D:\\xx\\3.bmp",ios::_Nocreate|ios::binary);
fin.read((char*)&bh,sizeof(bh));
fin.read((char*)&bih,sizeof(bih));


width=bih.biWidth;
height=bih.biHeight;
HWND myconsole=GetConsoleWindow();
HDC mydc=GetDC(myconsole);

for(int i=height;i>=1;i--)
for(int j=1;j<=width;j++)
{
fin.read(buf,sizeof(buf));
bmp[i][j*3]=buf[0];
bmp[i][j*3+1]=buf[1];
bmp[i][j*3+2]=buf[2];

}
for(int i=1;i<=height;i++)
{
for(int j=1;j<=width;j++)
{
COLORREF color;
color=RGB(bmp[i][j*3],bmp[i][j*3+1],bmp[i][j*3+2]);
SetPixel(mydc,j,i,color);
}
//cout<<width<<endl;
}
ReleaseDC(myconsole,mydc);
fin.close();
return 0;

source bmp display like this

我将像素读取到数组中,这个 bmp 的位数是 24,所以我使用 char[3] 来存储数据,但最终在控制台上显示成这样,我想不通。

最佳答案

位图图像数据行必须在 32 位边界上对齐。因此,您必须计算所需的填充量,并在每行末尾跳过该字节数。

一般来说,计算每行字节数和必须跳过的字节数的公式是:

int rowBytes = ( (width * bytes_per_pixel) + 3 ) & ~3;
int skipBytes = rowBytes - (width * bytes_per_pixel);

然后在读取文件时跳过每行末尾的skipBytes

关于c++ - 位图显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945111/

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