在MFC中如何读取256色位图或者24色真彩色bmp位图,请高手指点!

雪域迷影 2010-05-09 09:44:39
在菜单编辑器中添加打开位图菜单项并添加了bmp位图响应函数,
如下所示:
void CBTTMAPView::OnBmpOpen()
{
// TODO: Add your command handler code here
//CBTTMAPDoc* pDoc = GetDocument();
CString str;
CString filter="Bitmap Files(*.bmp)|*.bmp|Wmf Files(*.wmf)|*.wmf||"; //文件扩展名,充当文件的过滤器
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCTSTR)filter,NULL);
//创建打开文件对话框对象,默认的扩展名为".bmp"
//调用DoModal()函数显示打开文件对话框
if (dlg.DoModal() == IDOK)
{
//获取完整的文件名,包括目录名和扩展名,如"C:\res\demo.bmp"
str=dlg.GetPathName();
HBITMAP hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

CDC* pDC=GetDC();//获取设备上下文
CDC dcimage;

m_Bitmap.Attach(hBitmap); //关联位图对象
dcimage.CreateCompatibleDC(pDC); //内存DC

m_Bitmap.GetBitmap(&bmp); //获取位图信息
dcimage.SelectObject(&m_Bitmap); //选取位图对象
m_nWidth=bmp.bmWidth;
m_nHeight=bmp.bmHeight;
pDC->StretchBlt(0,0,(int)(bmp.bmWidth*m_dWrate),(int)(bmp.bmHeight*m_dHrate),&dcimage,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);



}
请问对文件过滤器filter进行处理的话能专门读取256色位图或者是24色位图吗?
...全文
497 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shengliyan 2010-05-26
  • 打赏
  • 举报
回复
文件过滤器只管文件格式是否是bmp格式,不管是256色还是
真彩色位图的。。。
[Quote=引用楼主 ccf19881030 的回复:]
在菜单编辑器中添加打开位图菜单项并添加了bmp位图响应函数,
如下所示:
void CBTTMAPView::OnBmpOpen()
{
// TODO: Add your command handler code here
//CBTTMAPDoc* pDoc = GetDocument();
CString str;
CString filter="Bitmap Fil……
[/Quote]
aslprince 2010-05-19
  • 打赏
  • 举报
回复
不是直接loadbitmap,然后显示就好了么???
xiuxianshen 2010-05-18
  • 打赏
  • 举报
回复
文件过滤器仅仅只能根据文件后缀分析出文件的格式,就是说只能分辨BMP和JPG等格式,而不能过滤分析出24位或者32位的,具体的位数还是要自己读取图像文件来得到的
Angie20090909 2010-05-18
  • 打赏
  • 举报
回复
从资源中装入GDI位图
Res目录下*.bmp ->IDB_*
CBitmap类中LoadBitmap()能将资源的DIB转换成GDI位图
void CPicView::OnDraw(CDC* pDC)
{
//CBitmap对象
CBitmap bitmap;
//设备环境类对象
CDC dcMemory;
//加载位图资源
bitmap.LoadBitmap(IDB_rabbit);
//创建内存设备环境
dcMemory.CreateCompatibleDC(pDC);
//把位图选进内存设备环境,并保存旧的GDI位图对象
CBitmap *oldbitmap=dcMemory.SelectObject(&bitmap);
//显示
pDC->BitBlt(0,0,854,621,&dcMemory,0,0,SRCCOPY);
//释放bitmap,恢复GDI位图
dcMemory.SelectObject(oldbitmap);
}
squiffy 2010-05-18
  • 打赏
  • 举报
回复
参考这个
http://tech.ddvip.com/2006-04/11442573003842.html

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧