马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目前使用CImage和CBitmap两个类,还有是将CImage转CBitmap显示。
MFC界面拖拽一个button按钮和一个Picture Control控件。
1.CImage显示。这种方式显示图片会有颜色不对的情况
- void Cpicture_test_controlDlg::OnBnClickedButton1()
- {
- // TODO: 在此添加控件通知处理程序代码
- CImage image;
- HRESULT hResult = image.Load("D:\\jpeg.bmp");
- if (!SUCCEEDED(hResult)) {
- AfxMessageBox("imread error");
- }
- //获取picture control 句柄
- CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);
-
- //获取控件大小
- CRect rect;
- pStatic->GetClientRect(&rect);
- int controlWidth = rect.Width();
- int controlHeight = rect.Height();
- //获取图片原始尺寸
- int imageWidth = image.GetWidth();
- int imageHeight = image.GetHeight();
- //创建兼容的DC
- CDC *pDC = pStatic->GetDC();
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- //创建兼容的位图,并选入内存DC
- CBitmap bmp;
- bmp.CreateCompatibleBitmap(pDC, controlWidth, controlHeight);
- CBitmap* pOldbmp = memDC.SelectObject(&bmp);
- BITMAP bmpInfo;
- bmp.GetBitmap(&bmpInfo); // 获取位图信息
- //清空背景
- memDC.FillSolidRect(&rect, pDC->GetBkColor());
- //使用CImage绘制倒内存DC, 这里使用缩放
- image.Draw(memDC.m_hDC, 0, 0, controlWidth, controlHeight, 0, 0, imageWidth, imageHeight);
- //将内存DC绘制到控件上
- pDC->BitBlt(0, 0, controlWidth, controlHeight, &memDC, 0, 0, SRCCOPY);
- //清理
- memDC.SelectObject(pOldbmp);
- ReleaseDC(pDC);
- }
复制代码 2.CBitmap显示
- void Cpicture_test_controlDlg::OnBnClickedButton1()
- {
- // TODO: 在此添加控件通知处理程序代码
- //需要再资源视图中增加资源,资源类型为Bitmap
- CBitmap img;
- if (!img.LoadBitmap(IDB_BITMAP2)) {
- AfxMessageBox("imread error");
- }
- // 获取Picture Control的设备上下文
- CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);
- CDC *pDC = pStatic->GetDC();
- // 获取对话框和图片的尺寸
- CRect rect;
- pStatic->GetClientRect(&rect);
- BITMAP bmpInfo;
- img.GetBitmap(&bmpInfo);
- // 创建兼容的内存设备上下文
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- CBitmap* pOldBitmap = memDC.SelectObject(&img);
- // 绘制缩放后的图片
- int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留
- pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);
- pDC->SetStretchBltMode(iStretchMode);
- // 清理
- memDC.SelectObject(pOldBitmap);
- ReleaseDC(pDC);
- }
复制代码 3.将CImage转CBitmap显示。有两种方式
- void Cpicture_test_controlDlg::OnBnClickedButton1()
- {
- // TODO: 在此添加控件通知处理程序代码
- CImage image;
- HRESULT hResult = image.Load("D:\\jpeg.bmp");
- if (!SUCCEEDED(hResult)) {
- AfxMessageBox("imread error");
- }
- HBITMAP hBitmap = image.Detach();
- CBitmap img;
- img.DeleteObject();
- img.Attach(hBitmap);
- // 获取Picture Control的设备上下文
- CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);
- CDC *pDC = pStatic->GetDC();
- // 获取对话框和图片的尺寸
- CRect rect;
- pStatic->GetClientRect(&rect);
- BITMAP bmpInfo;
- img.GetBitmap(&bmpInfo);
- // 创建兼容的内存设备上下文
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- CBitmap* pOldBitmap = memDC.SelectObject(&img);
- // 绘制缩放后的图片
- int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留
- pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);
- pDC->SetStretchBltMode(iStretchMode);
- // 清理
- memDC.SelectObject(pOldBitmap);
- ReleaseDC(pDC);
- }
复制代码- void Cpicture_test_controlDlg::OnBnClickedButton1()
- {
- // TODO: 在此添加控件通知处理程序代码
- CImage image;
- HRESULT hResult = image.Load("D:\\jpeg.bmp");
- if (!SUCCEEDED(hResult)) {
- AfxMessageBox("imread error");
- }
- HBITMAP hBitmap = image.Detach();
- CBitmap *img = CBitmap::FromHandle(hBitmap);
- // 获取Picture Control的设备上下文
- CStatic *pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PC);
- CDC *pDC = pStatic->GetDC();
- // 获取对话框和图片的尺寸
- CRect rect;
- pStatic->GetClientRect(&rect);
- BITMAP bmpInfo;
- img->GetBitmap(&bmpInfo);
- // 创建兼容的内存设备上下文
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- CBitmap* pOldBitmap = memDC.SelectObject(img);
- // 绘制缩放后的图片
- int iStretchMode = pDC->SetStretchBltMode(COLORONCOLOR); // 色彩保留
- pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);
- pDC->SetStretchBltMode(iStretchMode);
- // 清理
- memDC.SelectObject(pOldBitmap);
- ReleaseDC(pDC);
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |