MFC读取24位bmp图像出问题了,求大神来解决

baidu_25665887 baidu_25665887 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我要实现的是将24位bmp文件读入并在用户区显示,但是显示结果都不对的,谁能来帮忙看下?

注:因为对bmp文件还要做后续的处理(比如RGB转CMYK这样的),所以我现在写的代码只是一个测试是否正确读取bmp的程序。用其它控件去读取图片对我来说是毫无用处的。

这是我的代码:
void CMy3View::OnLoad()
{
// TODO: 在此添加命令处理程序代码
CString strFilter,strFilename,info;
unsigned short format,bit_per_pix,r,g,b;
unsigned int offset,bmp_width;
int bmp_height;
//打开bmp文件
strFilter=_T("bmp images(*.bmp)|*.bmp||");
CFileDialog dlg(true,NULL,NULL,OFN_EXPLORER|OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter);
if(dlg.DoModal()==IDOK){
strFilename=dlg.GetPathName();
CFile m_bmp(strFilename,CFile::modeRead);
m_bmp.SeekToBegin();
//读取bmp文件头
m_bmp.Read(&format,sizeof(unsigned short));
if(0x4d42!=format){//查看图片文件格式
AfxMessageBox(_T("The format of this bmp image is not supported by Windows!"));
}
m_bmp.Seek(0xa,CFile::begin); //读取到位图数据需要的偏移量
m_bmp.Read(&offset,sizeof(unsigned int));
m_bmp.Seek(0x12,CFile::begin); //读取位图宽高
m_bmp.Read(&bmp_width,sizeof(unsigned int));
m_bmp.Read(&bmp_height,sizeof(int));
m_bmp.Seek(0x1c,CFile::begin); //读取位图格式(256色,24位,32位)
m_bmp.Read(&bit_per_pix,sizeof(unsigned short));
m_bmp.Seek(offset,CFile::begin);//定位到位图数据
CClientDC dc(this);
int x,y;
if(24==bit_per_pix){ //如果是24位位图,则执行下列代码
if(bmp_height>0)
for(y=0;y<bmp_height;y++){
for(x=0;x<(int)bmp_width;x++){
m_bmp.Read(&b,sizeof(unsigned short));
m_bmp.Read(&g,sizeof(unsigned short));
m_bmp.Read(&r,sizeof(unsigned short));
dc.SetPixel(x,(bmp_height-y-1),RGB(r,g,b));
}
}
}

m_bmp.Close();
}
}
这是原始图片:

这是我的程序读取的结果:
...全文

相关推荐

数字图像处理 将24位真彩色BMP图像转化成8位BMP灰度图像

实验名称:彩色图转换成灰度图 实验任务:将24位真彩色BMP图像转化成8位BMP灰度图像

wanmingxing88

基于VC6.0的24位BMP图像显示实现

BMP(Bitmap)是一种广泛使用的位图图像格式,因其结构简单、易于解析而在图像处理领域占据重要地位。BMP文件通常由三个主要部分组成:文件头(BITMAPFILEHEADER)信息头(DIB头,BITMAPINFOHEADER)以及像素数据(Pixel Data)。文件头(BITMAPFILEHEADER):包含文件的基本信息,如文件类型、文件大小、数据偏移量等。DIB头(BITMAPINFOHEADER):详细描述图像的尺寸、颜色格式、压缩方式等。

芥子纳须弥1116

数字图像处理:MFC实现BMP图片的读取与存储

MFC作为微软的一套C++库,广泛应用于Windows平台下的应用程序开发。它封装了许多底层的API调用,使得开发者可以使用面向对象的方式进行编程。在图像处理方面,MFC提供了多个类来帮助开发者更容易地加载、显示、处理和保存图像数据。GDI和GDI+:GDI(Graphics Device Interface)是Windows的基础图形系统,用于绘制文本、线条、形状等。GDI+作为GDI的增强版,提供了更丰富的图像处理功能和更好的性能。CImage类:在MFC中,CImage。

车英赫

24位bmp位图转灰度图(MFC实现)

实现位图的读取显示保存,是一个典型的图像处理基础程序

longsystem

mfc打开并显示BMP图片

数字图像处理- MFC教程 第一课 建立MFC和打开bmp图片

烟消云撒
评论 6
收藏 已收藏
分享
返回顶部