【C++】GDI+图像编程入门(二、图像的光栅特效显示编程)

C++本人也是初学者,很多地方也不是很懂,写博客的原因主要有以下三个原因:

1.对于学习的得思路和资料进行整理

2.为比我还菜的朋友提供一定得参考

3.请CSDN高手对我写的代码进行批评和指正。

 

首先还是建立四个变量

m_ImageShow:为COpenImageFileApp类中的一个CImage类型的公共变量

m_StrImageFileName:为COpenImageFileApp类中的一个CString类型的公共变量

m_ShowDRect:为COpenImageFileApp类中的一个CRect类型的公共变量

m_iType:为COpenImageFileApp类中的一个int类型的公共变量

按照 【C++】GDI+图像编程入门(一、图像的打开与显示编程)中写好打开图像的方法。

 

在资源视图中,添加好下面的菜单:(不知道怎么的不能上传图片,图片就省了)

 

在给个菜单上点击添加事件处理程序,给定事件名称,双击。

在各自的事件中添加如下代码:

void CGPShowView::OnShowone()
{
 this->m_iType=0;
 this->Invalidate();
}
void CGPShowView::OnShowtwo()
{
    this->m_iType=1;
 this->Invalidate();
}
void CGPShowView::OnShowthree()
{
 this->m_iType=2;
 this->Invalidate();
}
void CGPShowView::OnShowfour()
{
 this->m_iType=3;
 this->Invalidate();
}
void CGPShowView::OnShowfive()
{
 this->m_iType=4;
 this->Invalidate();
}
void CGPShowView::OnShowsix()
{
 this->m_iType=5;
 this->Invalidate();
}
void CGPShowView::OnShowseven()
{
 this->m_iType=6;
 this->Invalidate();
}
void CGPShowView::OnShoweight()
{
 this->m_iType=7;
 this->Invalidate();
}
void CGPShowView::OnShownine()
{
 this->m_iType=8;
 this->Invalidate();
}
void CGPShowView::OnShowten()
{
 this->m_iType=9;
 this->Invalidate();
}

 

在OnInitialUpdate中添加

void CGPShowView::OnInitialUpdate()
{
 CScrollView::OnInitialUpdate();
 CSize sizeTotal;
 // TODO: 计算此视图的合计大小
 sizeTotal.cx = sizeTotal.cy = 100;
 SetScrollSizes(MM_TEXT, sizeTotal);
}

 

在OnDraw中添加

void CGPShowView::OnDraw(CDC* pDC)
{
 CGPShowDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 //设置背景色

 CBrush  BackBrush;
 BackBrush.CreateSolidBrush(RGB(128,128,128));
 CBrush *pOldBrush=pDC->SelectObject(&BackBrush);
 pDC->Rectangle(CRect(0,0,30000,30000));
 pDC->SelectObject(pOldBrush);
 //图像光栅特效显示
 switch(m_iType)
 {
  case 0: 
   //使用AND操作符组合源和目标矩形颜色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCAND);
   break;
  case 1: 
   //使用OR操作符组合当前选择的画刷颜色和反转的源矩形颜色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,PATPAINT);
   break;
  case 2: 
   //反转目标矩形
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,DSTINVERT);
   break;
  case 3:
   //使用AND操作符合并当前选择的画刷和源矩形的颜色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,MERGECOPY);
   break;
  case 4: 
   //使用OR操作符合并反转源矩形和目标矩形的颜色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,MERGEPAINT);
   break;
  case 5: 
   //使用OR操作符组合源和目标矩形的颜色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCPAINT);
   break;
  case 6: 
   //复制反转的源矩形到目标矩形
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,NOTSRCCOPY);
   break;
  case 7: 
   //使用OR操作符组合源和目标矩形颜色后,然后反转
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,NOTSRCERASE);
   break;
  case 8:
   //使用AND操作符组合源矩形颜色和目标矩形颜色的反转色
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCERASE);
   break;
  case 9: 
   //使用XOR操作符组合源和目标矩形的操作符
   m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCINVERT);
   break;
 }
}

这样具有各种不同的光栅效果的简单的程序我们就完成了,希望大家多练习,到时候连贯起来用。

 

本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点

邮箱:bobui@163.com

QQ125941562

注:欢迎转载,请保留上面的作者信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值