VC实现打开BMP
来源:互联网 发布:php开发qq客户端 编辑:程序博客网 时间:2024/03/29 02:15
VC实现打开BMP (转载)
1.新建一个单文档的应用程序,项目名称为ShowBitmap
2.为CShowBitmapView类添加下述成员变量和成员函数:
//参数定义
public:
int state; //位图显示状态
CString BmpName; //保存图像文件文件名
CString extname; //保存图像文件扩展名
CBitmap m_bitmap; //创建位图对象
void ShowBitmap(CString BmpName); //用来显示指定位图的函数
3.在CShowBitmap类的构造函数中,初始化成员变量state
CShowBitmapView::CShowBitmapView()
{
state=0;
}
4.为ID_FILE_OPEN消息添加响应函数(具体怎么加就不细说了),编写该函数
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|jpg文件(*.jpg)|*.jpg||"));
if (IDOK==dlg.DoModal())
{
state=0;
BmpName.Format(_T("%s"),dlg.GetPathName());
extname = dlg.GetFileExt(); //返回选定文件的扩展文件名
extname.MakeLower();
if (0==extname.Compare(_T("bmp")))
{
ShowBitmap(BmpName);
}
else
{
state=1;
}
Invalidate();
}
}
5.将BMP图片读入
void CShowBitmapView::ShowBitmap(CString BmpName)
{
if (state==0)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_bitmap.Detach();
m_bitmap.Attach(hBitmap);
state=1;
Invalidate();
}
}
6.修改OnDraw函数,实现图片的显示
// CShowBitmapView 绘制
void CShowBitmapView::OnDraw(CDC* pDC)
{
CShowBitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (state==1)
{
if (0 == extname.Compare(_T("bmp")))
{
CDC dcImage;
if (!dcImage.CreateCompatibleDC(pDC))
{
return;
}
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
}
}
}
2.为CShowBitmapView类添加下述成员变量和成员函数:
//参数定义
public:
int state; //位图显示状态
CString BmpName; //保存图像文件文件名
CString extname; //保存图像文件扩展名
CBitmap m_bitmap; //创建位图对象
void ShowBitmap(CString BmpName); //用来显示指定位图的函数
3.在CShowBitmap类的构造函数中,初始化成员变量state
CShowBitmapView::CShowBitmapView()
{
state=0;
}
4.为ID_FILE_OPEN消息添加响应函数(具体怎么加就不细说了),编写该函数
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP)|*.BMP|jpg文件(*.jpg)|*.jpg||"));
if (IDOK==dlg.DoModal())
{
state=0;
BmpName.Format(_T("%s"),dlg.GetPathName());
extname = dlg.GetFileExt(); //返回选定文件的扩展文件名
extname.MakeLower();
if (0==extname.Compare(_T("bmp")))
{
ShowBitmap(BmpName);
}
else
{
state=1;
}
Invalidate();
}
}
5.将BMP图片读入
void CShowBitmapView::ShowBitmap(CString BmpName)
{
if (state==0)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_bitmap.Detach();
m_bitmap.Attach(hBitmap);
state=1;
Invalidate();
}
}
6.修改OnDraw函数,实现图片的显示
// CShowBitmapView 绘制
void CShowBitmapView::OnDraw(CDC* pDC)
{
CShowBitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (state==1)
{
if (0 == extname.Compare(_T("bmp")))
{
CDC dcImage;
if (!dcImage.CreateCompatibleDC(pDC))
{
return;
}
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
}
}
}
上面的程序实现中,涉及到了双缓冲绘图
双缓冲绘图步骤:1、加载图像代码中是用的HBITMAP方式,就是下面这段。(还可以是GDI+等等)HBITMAP hBitmap= (HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE); // BmpName是我们传进来的位图文件的文件名m_bitmap.Detach(); // Detach、Attach就是卸载和加载(从句柄中,),m_bitmap.Attach(hBitmap); //如果把Attach看做“联姻”的话,那么Detach就是“离婚”了,通俗地说,就是切断一个CWnd对象和一个有效窗口的脐带。
2、创建内存绘图DC CDC dcImage; //这里只是定义了dcImage这个对象,下面一句才是真正创建出来了一个内存DC,即dcImageBOOL flag=dcImage.CreateCompatibleDC(pDC); 其中的dcImage就是内存DC。//依附窗口DC创建兼容内存DC
3、将图像一次绘制在内存DC上。dcImage.SelectObject(m_bitmap);在这一步中,还可以完成一些画图工作
//创建兼容位图(必须用pDC创建,否则画出的图形变成黑色)
//画图,添加你要画图的代码,不过用dcImage画,而不是pDC;
另外,还可以创建一些画刷,用FillSolidRect来填充窗口等4、将内存DC的图像按尺寸绘制在窗口中。pDC->BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcImage,0,0,SRCCOPY);//
......
//将内存DC上的图象拷贝到前台
//绘图完成后的清理
除了上面4步之外,最好还要完成一些清理工作//绘图完成后的清理
dcMem.DeleteDC();
//删除DC
bmp.DeleteObject();
//删除位图
0 0
- VC实现打开BMP
- VC实现打开BMP JPG或GIF图片
- VC实现打开BMP JPG或GIF图片(二)|VC/MFC/打开图片
- VC编程打开BMP图片
- VC实现BMP位图实现
- VC打开bmp文件,读取信息
- Vc++如何实现按钮打开*bmp的文件,请各位大虾指教?
- VC 实现BMP转换到JPG、JPG转换到BMP
- VC打开并缩放显示位图(.BMP)文件的方法
- MFC实现打开BMP JPG或GIF图片
- VC实现BMP位图文件结构及平滑缩放
- VC实现BMP位图文件结构及平滑缩放
- VC实现生成BMP文件(DDA算法画直线)
- VC实现BMP位图文件结构及平滑缩放
- VC实现BMP位图文件结构及平滑缩放
- VC实现BMP位图文件结构及平滑缩放(1)
- VC实现自绘图形输出到bmp文件
- CBitmap保存为Bmp文件 VC++ MFC实现
- Oracle AWR 阙值影响历史执行计划
- 程序人生的四个象限和两条主线
- hibernate 统计排序取前十名
- Hadoop本地库与系统版本不一致引起的错误解决方法
- 如何让Div中的Table居中
- VC实现打开BMP
- android蓝牙传输文件时的文件格式限制及其解决方法
- java字符编码转换研究(转)
- Pro SharePoint with JQuery笔记1
- Evaluate Reverse Polish Notation
- c++按位操作符
- IOS开发Scoket接受报文不全(分多次接受)的TCP粘包问题
- android SearchView 样式修改
- ios设备唯一标识获取策略