VC中怎样将位图写入指定的Picture控件中
来源:互联网 发布:软件带有hd是什么意思 编辑:程序博客网 时间:2024/04/29 01:26
注意着两种方式都要事先在对话框中拖picture控件,将其ID改为:IDC_PHOTO
看这篇文章之前建议先看一下下面这篇文章:
VC下显示位图的几种方法 http://blog.csdn.net/ply421600/article/details/6692967
//方式一:通过加载一张已有的位图,并将其显示在指定的picture控件中void CTestDlg::OnPaint()
{CPaintDC dc(this);
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap*pold=memDC.SelectObject(&bmp);
CStatic *pPHoto=(CStatic*)GetDlgItem(IDC_PHOTO);//DC_PHOTO为指定的Picture控件
RECT rect;
pPHoto->GetClientRect(&rect);
pPHoto->GetDC()->StretchBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,&memDC,0,0,100,100,SRCCOPY);
dc.SelectObject(&pold);
bmp.DeleteObject();
}
//方式二:通过文件读取位图信息,并将其显示在指定的picture控件中
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
// CStatic *pStatic=(CStatic*)GetDlgItem(IDC_PHOTO);
//CClientDC dc(this);
CFileDialog fileDlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"(*.bmp)|*.bmp||");
if (fileDlg.DoModal()!=IDOK)
{
return;
}
CString filePath=fileDlg.GetPathName();
CString strFileName=filePath;
//成位图信息BITMAPINFO
BITMAPINFO *bitmapinfo=NULL;
BYTE *BmpData=NULL;
CFile file;//读取位图信息
//设置文件的打开方式
if(!file.Open(strFileName,CFile::modeRead|CFile::typeBinary))
{
return;
}
//BITMAP文件头结构体
BITMAPFILEHEADER BitmapHead;
//读取位图文件头
if(file.Read(&BitmapHead,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER))
{
MessageBox("读取文件头失败!");
return;
}
if(BitmapHead.bfType!=0x4d42)
{
MessageBox("对不起,您读取的不是位图文件!");
return;
}
//位图信息
BITMAPINFOHEADER BitmapInfo;
if(file.Read(&BitmapInfo,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER))
{
MessageBox("读取位图信息失败!");
return;
}
if(BitmapInfo.biBitCount!=24)
{
MessageBox("对不起,当前程序只支持24位位图信息!");
return;
}
bitmapinfo=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)];
if(!bitmapinfo)
{
MessageBox("内存分配失败!");
return;
}
/*把BMP位图信息头中的数据读取到位图信息结构中去.*/
memcpy(bitmapinfo,&BitmapInfo,sizeof(BITMAPINFOHEADER));
/*用来得到位图文件的大小*/
DWORD dataByte=BitmapHead.bfSize-BitmapHead.bfOffBits;
BmpData=(BYTE*)new char[dataByte];
if(!BmpData)
{
MessageBox("内存分配失败!");
delete bitmapinfo;
delete BmpData;
return;
}
if(file.Read(BmpData,dataByte)!=dataByte)
{
MessageBox("读取位图数据失败!");
return;
}
file.Close();
// CClientDC *pDC=new CClientDC(this);
// pDC->SetStretchBltMode(COLORONCOLOR);
CClientDC dc(this);
// dc.SetStretchBltMode(COLORONCOLOR);
CStatic *pstatic=(CStatic*)GetDlgItem(IDC_PHOTO);
CRect lprect;
pstatic->GetClientRect(lprect);
//StretchDIBits(dc.GetSafeHdc(),200,0,BitmapInfo.biWidth,BitmapInfo.biHeight, 0,0,BitmapInfo.biWidth,BitmapInfo.biHeight,BmpData,bitmapinfo,DIB_RGB_COLORS,SRCCOPY);
//另外CreateDIBitmap的用法和StretchDIBits用法举例
StretchDIBits(pstatic->GetDC()->GetSafeHdc(),lprect.left,lprect.top,lprect.Width(),lprect.Height(), 0,0,BitmapInfo.biWidth,BitmapInfo.biHeight,BmpData,bitmapinfo,DIB_RGB_COLORS,SRCCOPY);
//注意下面这些代码是完全可以替代StretchDIBits,你完全可以将其注释掉,这也可以知道CreateDIBitmap的用法
HBITMAP m_hPhotoBitmap=CreateDIBitmap(pstatic->GetDC()->m_hDC,&BitmapInfo,CBM_INIT,(VOID*)BmpData,bitmapinfo,DIB_RGB_COLORS);
CBitmap bmp; //定义位图变量
bmp.Attach(m_hPhotoBitmap);
BITMAP bm; //定义一个位图结构
bmp.GetBitmap(&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(GetDC()); //创建一个兼容的DC
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(bmp); //将位图选入设备环境类
CRect lRect; //定义一个区域
pstatic->GetClientRect(&lRect); //获取控件的客户区域
lRect.NormalizeRect();
pstatic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //显示位图
dcMem.SelectObject(&poldBitmap); //将原有的句柄选入设备环境
}
- VC中怎样将位图写入指定的Picture控件中
- MFC/VC++中怎样将一个位图添加到数据库中并且将其读出来到指定的Picture控件上
- MFC中怎样将位图写入指定的Picture控件中,两种方式:1 加载已有位图 2读取位图文件;另外CreateDIBitmap的用法和StretchDIBits用法举例
- MFC中怎样将位图写入指定的Picture控件中,两种方式:1 加载已有位图 2读取位图文件;另外CreateDIBitmap的用法和StretchDIBits用法举例
- MFC将一个位图添加到数据库中并且将其读出来到指定的Picture控件上
- CreateDIBitmap的用法和StretchDIBits用法举例,来显示位图到指定的picture控件中
- VC++如何将缓冲数据写入到位图中
- MFC中Picture控件,将位图转换成任意大小再放入控件中
- MFC中将位图写入指定Picture控件中的两种方式
- VC中实现带有背景位图的树型控件
- VC中实现带有背景位图的树型控件
- VC中实现带有背景位图的树型控件
- VC中实现带有背景位图的树型控件
- vc怎样在picture control中添加图片
- vc怎样在picture control中添加图片
- vc怎样在picture control中添加图片
- 利用slf4j+log4j将日志写入指定的文件中
- MFC中怎样把抓取到的位图保存到指定文件中
- mysql数据库-索引
- 手机自动化测试(8)--adb通过WIFI连接手机
- 【精华】 数据中心双活该如何构建
- hihocoder
- Hello World for U
- VC中怎样将位图写入指定的Picture控件中
- 第十三周上机实践项目:阅读程序
- Sublime Text 3 绝对神器
- 年中总结
- android之gradle介绍
- VC中的CSpinButtonCtrl使用说明
- 多次点击源码
- windows 安全模型简介
- 请教大神,关于svn的弹出安全验证窗口的问题