《工作笔记》 mfc 利用HBITMAP 和CBITMAP 显示位图文件
2009-09-11 17:19
465 查看
显示位图文件有n中方法:
1 利用双缓冲技术;
源码:
void showBMP()
{
CString str;
CString filter="Bitmap Files(*.bmp)|*.bmp|Wmf Files(*.wmf)|*.wmf||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCTSTR)filter,NULL);
if (dlg.DoModal() == IDOK)
{
str=dlg.GetPathName();
HBITMAP hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap bitmap;
bitmap.Attach(hBitmap); //关联位图对象
CDC* pDC=GetDC();
CDC dcimage;
dcimage.CreateCompatibleDC(pDC); //内存DC
BITMAP bmp;
bitmap.GetBitmap(&bmp); //获取位图信息
dcimage.SelectObject(&bitmap); //选取位图对象
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcimage,0,0,SRCCOPY); //显示
}
};
2 使用 Cximage .draw()
源码:
void CMap2Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
CxImage image;
// CImage Image;
CString fileName;
CString filter="JPEG Files(*.jpg)|*.jpg|Bitmap Files(*.bmp)|*.bmp|Wmf Files(*.wmf)|*.wmf||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCTSTR)filter,NULL);
if (dlg.DoModal() == IDOK)
{
fileName=dlg.GetFileName();
CString fileExt; //图片的扩展名
int len = fileName.GetLength();
for(int i=len-1; i>=0; i--) //得到图片的扩展名
{
if(fileName[ i ] == '.')
{
fileExt=fileName.Mid(i+1);
break;
}
}
fileExt.MakeLower(); //将扩展名转为小写
if(fileExt != _T(""))
{
//创建CxImage对象,其中静态方法CxImage::GetTypeIdFromName用来根据扩展名获得图片格式的ID代表
CxImage image(fileName,CxImage::GetTypeIdFromName(fileExt));/** / CXIMAGE_FORMAT_JPG);*/
if(image.IsValid())
{
HDC hdc=(HDC)GetForegroundWindow();
CDC * pDc=GetDC();
CRect rect;
GetWindowRect(&rect);
CPaintDC dc(this);
image.Draw(dc.GetSafeHdc(), rect,0, 0);
image.Destroy();
}
}
}
}
未完待续。。。。
1 利用双缓冲技术;
源码:
void showBMP()
{
CString str;
CString filter="Bitmap Files(*.bmp)|*.bmp|Wmf Files(*.wmf)|*.wmf||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCTSTR)filter,NULL);
if (dlg.DoModal() == IDOK)
{
str=dlg.GetPathName();
HBITMAP hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap bitmap;
bitmap.Attach(hBitmap); //关联位图对象
CDC* pDC=GetDC();
CDC dcimage;
dcimage.CreateCompatibleDC(pDC); //内存DC
BITMAP bmp;
bitmap.GetBitmap(&bmp); //获取位图信息
dcimage.SelectObject(&bitmap); //选取位图对象
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcimage,0,0,SRCCOPY); //显示
}
};
2 使用 Cximage .draw()
源码:
void CMap2Dlg::OnButton3()
{
// TODO: Add your control notification handler code here
CxImage image;
// CImage Image;
CString fileName;
CString filter="JPEG Files(*.jpg)|*.jpg|Bitmap Files(*.bmp)|*.bmp|Wmf Files(*.wmf)|*.wmf||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(LPCTSTR)filter,NULL);
if (dlg.DoModal() == IDOK)
{
fileName=dlg.GetFileName();
CString fileExt; //图片的扩展名
int len = fileName.GetLength();
for(int i=len-1; i>=0; i--) //得到图片的扩展名
{
if(fileName[ i ] == '.')
{
fileExt=fileName.Mid(i+1);
break;
}
}
fileExt.MakeLower(); //将扩展名转为小写
if(fileExt != _T(""))
{
//创建CxImage对象,其中静态方法CxImage::GetTypeIdFromName用来根据扩展名获得图片格式的ID代表
CxImage image(fileName,CxImage::GetTypeIdFromName(fileExt));/** / CXIMAGE_FORMAT_JPG);*/
if(image.IsValid())
{
HDC hdc=(HDC)GetForegroundWindow();
CDC * pDc=GetDC();
CRect rect;
GetWindowRect(&rect);
CPaintDC dc(this);
image.Draw(dc.GetSafeHdc(), rect,0, 0);
image.Destroy();
}
}
}
}
未完待续。。。。
相关文章推荐
- mfc 利用HBITMAP 和CBITMAP 显示位图文件
- mfc 利用HBITMAP 和CBITMAP 显示位图文件(双缓冲)
- mfc 利用HBITMAP 和CBITMAP 显示位图文件
- mfc 利用HBITMAP 和CBITMAP 显示位图文件
- mfc 位图显示方法 使用cbitmap和hbitmap
- 位图文件结构及MFC显示
- 《工作笔记》 之 在mfc中显示JPG 文件
- VC/MFC怎样将位图CBitmap对象保存成为bmp格式文件?(你在网上找的不一定灵,看我的一定灵)
- VC/MFC怎样将位图CBitmap对象保存成为bmp格式文件? from http://coding1688.iteye.com/blog/1547035
- MFC中实现简单的位图显示、处理
- MFC中显示一张位图
- 利用DataGrid显示某目录下的所有文件
- MFC中控件位图显示
- 在MFC中通过opencv显示摄像头视频或者文件视频
- linux 下利用ls grep 和正则表达式实现目录和文件的分开显示
- 在mfc中利用opencv打开摄像头并显示在窗口上
- MFC 拖拽文件到Edit控件后在Edit中显示文件路径及名称
- 利用MFC的Picture控件显示和处理图像
- Java平台要实现类似豆丁百度文科的文档在线阅读,总体思路是讲doc docx等文件格式利用jcom转换成pdf再用swftools转为swf。再用flexpaper组件显示swf。
- iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)