//获取View视图类的指针并刷新视图[cpp] CMainFrame *pMainFrame=(CMainFrame*)AfxGetMainWnd();
CGdiPlus_ColorView *pView=(CGdiPlus_ColorView*)pMainFrame->GetActiveView();
//pView->UpdateWindow();
pView->Invalidate();
//UpdateWindow();
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
CMainFrame *pMainFrame=(CMainFrame*)AfxGetMainWnd();
CGdiPlus_ColorView *pView=(CGdiPlus_ColorView*)pMainFrame->GetActiveView();
//pView->UpdateWindow();
pView->Invalidate();
//UpdateWindow();
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
} 4.Doc文档类中的相关操作
添加变量image,用以保存打开的图像文件,另重载文档类中的OnOpenDocument函数
[cpp] public:
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
Image* image;
public:
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
Image* image; 在OnOpenDocument函数中将打开的图像文件存入Image变量中
[cpp] BOOL CGdiPlus_ColorDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: 在此添加您专用的创建代码
image=Image::FromFile(lpszPathName);
//UpdateAllViews(NULL);
return TRUE;
}
BOOL CGdiPlus_ColorDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: 在此添加您专用的创建代码
image=Image::FromFile(lpszPathName);
//UpdateAllViews(NULL);
return TRUE;
}
5.View视图类中的相关操作
首先要添加两个变量,1个时alpha的值,另一个是指向图像透明度对话框的指针;
[cpp] public:
REAL alpha;//图像透明度
CImageDlg *dlg;//图像透明度对话框指针
public:
REAL alpha;//图像透明度
CImageDlg *dlg;//图像透明度对话框指针
然后在资源文件中给菜单栏添加图像处理这个菜单项,并为其绑定时间处理程序,在时间处理程序中用非模态方式显示图像透明度对话框
[cpp] void CGdiPlus_ColorView::OnImageAlpha()
{
// TODO: 在此添加命令处理程序代码
dlg->Create(IDD_DIALOG1,this);
dlg->ShowWindow(SW_SHOW);//非模态对话框
}
void CGdiPlus_ColorView::OnImageAlpha()
{
// TODO: 在此添加命令处理程序代码
dlg->Create(IDD_DIALOG1,this);
dlg->ShowWindow(SW_SHOW);//非模态对话框
} 最后在OnDraw函数中实现绘图操作
[cpp] void CGdiPlus_ColorView::OnDraw(CDC* pDC)
{
CGdiPlus_ColorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (pDoc->image==NULL)
{
return;
}
alpha=dlg->m_alpha;
void CGdiPlus_ColorView::OnDraw(CDC* pDC)
{
CGdiPlus_ColorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (pDoc->image==NULL)
{
return;
}
alpha=dlg->m_alpha;[cpp] //获得图像的宽度和高度
int nWidth=pDoc->image->GetWidth();
int nHight=pDoc->image->GetHeight();
//声明空白图像
Bitmap bitmap(nWidth,nHight);
Rect rect(0,0,nWidth,nHight);
Graphics temp(&bitmap);//对新图像进行绘制
ColorMatrix colorMartrix={
1,0,0,0,0,
0,1,0,0,0,
0,0,1,0,0,
0,0,0,alpha,0,
0,0,0,0,1};
ImageAttributes imageAttr;
imageAttr.SetColorMatrix(&colorMartrix);
temp.DrawImage(pDoc->image,rect,0,0,nWidth,nHight,UnitPixel,&imageAttr);
//创建于设备兼容的内存环境
CDC memDC;
CBitmap MemBitmap;
CRect ClientRect;
GetClientRect(ClientRect);
memDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,ClientRect.Width(),ClientRect.Height());
memDC.SelectObject(MemBitmap);
memDC.FillSolidRect(0,0,ClientRect.Width(),ClientRect.Height()