2024年2月21日发(作者:)
VC++图像应用指南一——图像显示
一、设备上下文中绘制图像
1.穿建一个单文档/视图结构的应用程序 2.1在视图类的OnDraw编写如下代码
void COUtView::OnDraw(CDC* pDC)
{
COUtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC memDC;
CompatibleDC(pDC);
CBitmap bmp;
tmap(IDB_BKBITMAP);
Object(&bmp);
pDC->BitBlt(30,20,180,180,&memDC,1,1,S1.点击文件→选择新建→选择MFC APP ;填RCCOPY);
CRect rc(30,20,210,200);
写工程名;点击确认→
CBrush brush(RGB(0,0,0));
2.选择单文档→点击完成
pDC->FrameRect(rc,&brush);
2.2程序
Rect(220,0);
BITMAP BitInfo;
map(&BitInfo);
int x=h;
int y=ht;
pDC->StretchBlt(,,(),(),&memDC,0,0,x,y,SRCCOPY);
pDC->FrameRect(rc,&brush);
Object();
DC();
Object();
}
3.运行程序出现IDB_BKBITMAP不存在 4.成功运行程序
左图使用了BitBlt方法,在区域中只显示部分
图像;右图使用了SretchBlt方法,在区域中显示完整图像,图像被收缩了
二、从磁盘中加载图像到窗口中
1.穿建一个单文档/视图结构的应用程序 2.在视图类中添加一个成员变量m_hBmp
HANDLE m_hBmp
1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→
2.选择单文档→点击完成
3.在视图类的构造函数中调用LoadImage方法从磁盘中加载文件
CMy456View::CMy456View()
{
m_hBmp=LoadImage(NULL,"",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
}
4.1在视图类中OnDraw方法中绘制位图,代码如下:
4.2程序
void CMy456View::OnDraw(CDC* pDC)
{
CMy456Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBitmap bmp;
(m_hBmp);
CDC memDC;
CompatibleDC(pDC);
Object(&bmp);
BITMAP BitInfo;
map(&BitInfo);
int x=h;
int y=ht;
pDC->BitBlt(0,0,x,y,&memDC,0,0,SRCCOPY);
();
DC();
}
5运行程序
三、显示JPEG图像
1.创建单文档/视图结构的应用程序 2.向视图类中添加成员变量
1.点击文件→选择新建→选择MFC APP ;填
写工程名;点击确认→
2.选择单文档→点击完成
HGLOBAL hMem;
OLE_YSIZE_HIMETRIC m_JPGHeight;
OLE_XSIZE_HIMETRIC m_JPGWidth;
IPicture *m_pPicture;
IStream *m_pStream;
3.视图构造函数中从磁盘加载JPEG图像到流CMy654View::CMy654View()
{CFile file;
中
("",CFile::modeReadWrite);
DWORD len=gth();
hMem=GlobalAlloc(GMEM_MOVEABLE,len);
LPVOID pData=NULL;
pData=GlobalLock(hMem);
ge(pData,len);
();
GlobalUnlock(hMem);
CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);
m_pPicture->get_Height(&m_JPGHeight);
m_pPicture->get_Width(&m_JPGWidth);}
4.在视图类OnDraw方法中绘制JPEG图像 5.运行
m_pPicture->Render(pDC->m_hDC,0,0,(int)(m_JPGWidth/26.45),(int)(m_JPGHeight/26.45),0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);
四、根据位图数据直接绘图/使用SretchDIBits根据数据流绘制图像
1.创建单文档/视图结构的应用程序 2.在视图类中定义一个缓冲区,用于存储数据流
char *m_pBmpData;
1.点击文件→选择新建→选择MFC APP ;填写工程名;点击确认→
2.选择单文档→点击完成
3.1在视图类的构造函数中读取文件到数据流中
CMy627View::CMy627View()
{ CFile file;
("",CFile::modeReadWrite);
int len=gth();
(14,CFile::begin);
m_pBmpData=new char[len-14];
(m_pBmpData,len-14);
();}
4.1在视图类的析构函数中释放缓冲区
CMy627View::~CMy627View()
{
delete m_pBmpData;
}
4.2程序
3.2程序
5.1向视图类中添加一个成员函数,根据数据5.2程序
流输出图像
void CMy627View::OutputStream(char
*pStream)
{
char *pHeader=pStream;
BITMAPINFO BitInfo;
memset(&BitInfo,0,sizeof(BITMAPINFO));
memcpy(&BitInfo,pHeader,sizeof(BITMAPINFO));
int x=h;
int y=ht;
pHeader+=40;
StretchDIBits(GetDC()->m_hDC,0,0,x,y,0,0,x,y,pHeader,&BitInfo,DIB_RGB_COLORS,SRCCOPY);
}
6.在视图类的OnDraw方法中调用OutputSteam方法绘制图像
7.向程序中添加图像
void CMy627View::OnDraw(CDC* pDC)
{
CMy627Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
OutputStream(m_pBmpData);
}
8.成果运行程序


发布评论