您的位置:首页 > 财经 > 金融 > 成品网站w灬源码伊甸3m8u_康师傅品牌策划方案_广州seo外包公司_网络营销策划书总结

成品网站w灬源码伊甸3m8u_康师傅品牌策划方案_广州seo外包公司_网络营销策划书总结

2024/11/16 13:04:18 来源:https://blog.csdn.net/yuchunhai321/article/details/143711411  浏览:    关键词:成品网站w灬源码伊甸3m8u_康师傅品牌策划方案_广州seo外包公司_网络营销策划书总结
成品网站w灬源码伊甸3m8u_康师傅品牌策划方案_广州seo外包公司_网络营销策划书总结

目前使用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();//创建兼容的DCCDC *pDC = pStatic->GetDC();CDC memDC;memDC.CreateCompatibleDC(pDC);//创建兼容的位图,并选入内存DCCBitmap 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: 在此添加控件通知处理程序代码//需要再资源视图中增加资源,资源类型为BitmapCBitmap 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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com