用vc++读取bmp格式的图片并显示出来的程序代码

本人初学者,要用VC++做图像增强,可开头就卡住了,希望高手指点,最好再附上一些详细的操作方法。不胜感激!... 本人初学者,要用VC++做图像增强,可开头就卡住了,希望高手指点,最好再附上一些详细的操作方法。不胜感激! 展开
 我来答
mozhaodi
2010-03-30 · 超过20用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:64.3万
展开全部
用CDIB类,图像设备无关类。这是里边载入bmp图片的函数,加了这个类后直接调用就行。网上有很多例子,去pudn吧,那里有很多
int CDIB::LoadBmp(LPCSTR filename)
{
//打开文件
CFile file(filename,CFile::modeRead|CFile::shareDenyNone);

WORD bfType;
DWORD bfSize;

//读入文件头
file.Read(&bfType,sizeof(WORD));
file.Read(&bfSize,sizeof(DWORD));
if(bfSize <= 0)
{
file.Close();
return -1;
}

//是否Bmp文件
if (bfType != (((WORD)'M'<<8) + 'B'))
{
file.Close();
return -1;
}

DWORD bfOffBits;
//找到位图数据起始偏移并读入
file.Seek(2*sizeof(WORD),CFile::current);
file.Read(&bfOffBits,sizeof(DWORD));

LPVOID DibBuf;

DibBuf = (LPVOID)new char[bfSize];

if(DibBuf == NULL)
{
file.Close();
return -1;
}

//读入位图数据
file.ReadHuge(DibBuf,bfSize);
file.Close();

LPBITMAPINFO pBMI;

int size = bfOffBits - 14;
pBMI = (LPBITMAPINFO)new char[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];

//生成信息头
memcpy(pBMI,DibBuf,size);
LPVOID lpBits = (LPVOID)((LPSTR)DibBuf + size);

//创建位图
CreateDIBIndirect(pBMI, lpBits);

delete pBMI;
delete DibBuf;
return 1;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式