关于CPictureEx类,网上很多文章了。但基于CPictureEx展示的GIF图片,却无法缩放,有些不方便。因项目中用到了这个类,而且要实现缩放的功能。于是研究了一下,现将相关代码写下来,仅供参考。

分两步:

1、主要是修改OnPaint函数,这个方法里使用了BitBlt函数,这是一个不能缩放图片的函数,我们使用StretchBlt来实现缩放。

2、使用SetPaintRect函数,此函数在CPictureEx类中。

看核心代码:

CPictureEx *m_Picture;  void CAnimationPic::Draw(CDC *pDC)  //绘制GIF动画   {  CRect rect;//定义矩形大小  rect.TopLeft().x = m_nOrgX;  rect.TopLeft().y = m_nOrgY;  rect.BottomRight().x = m_nDestX;  rect.BottomRight().y = m_nDestY;  m_Picture = new CPictureEx();  ASSERT_VALID(m_Picture);          m_Picture->Create(_T("GIF"),WS_CHILD|WS_VISIBLE|SS_NOTIFY,rect,pDC->GetWindow(),21234);  m_Picture->Load(_T(m_AnimationPicName));//加载GIF路径  m_Picture->SetBkColor(RGB(255,255,255));  //  m_Picture->SetBgMode(CPictureEx::BackgroundMode::TransparentBg, RGB(0, 0, 0));  pDC->SetBkColor(RGB(255,255,255));  m_Picture->SetPaintRect(&rect);  m_Picture->Draw();         }  void CPictureEx::OnPaint()   {  CPaintDC dc(this); // device context for painting  LONG nPaintWidth = m_PaintRect.right-m_PaintRect.left;  if (nPaintWidth > 0)  {  LONG nPaintHeight = m_PaintRect.bottom - m_PaintRect.top;  //  ::BitBlt(dc.m_hDC, 0, 0, nPaintWidth, nPaintHeight,   //      m_hMemDC, m_PaintRect.left, m_PaintRect.top, SRCCOPY);  ::StretchBlt(dc.m_hDC, 0, 0, nPaintWidth,nPaintHeight, m_hMemDC, 0,0,m_PictureSize.cx, m_PictureSize.cy,SRCCOPY);   }  else  {  ::BitBlt(dc.m_hDC, 0, 0, m_PictureSize.cx, m_PictureSize.cy,  m_hMemDC, 0, 0, SRCCOPY);  }  }  //此函数供放大缩小按钮调用  void CAnimationPic::AdjustPositon(CRect rect)  {  if (m_Picture != NULL)  {  m_Picture->SetPaintRect(&rect);  m_Picture->MoveWindow(&rect, TRUE);        }  }  

CPictureEx类实现GIF图片的缩放相关推荐

  1. java 给图片加马赛克_java处理图片--图片的缩放,旋转和马赛克化

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转 ...

  2. PHP 图片处理类(水印、透明度、缩放、相框、锐化、旋转、翻转、剪切、反色)...

    最新PHP 图片处理类(水印.透明度.缩放.相框.锐化.旋转.翻转.剪切.反色) 以下是三零网为大家整理的最新PHP 图片处理类(水印.透明度.缩放.相框.锐化.旋转.翻转.剪切.反色)的文章,希望大 ...

  3. 图片的缩放(放大缩小)

    package com.school.util;import java.awt.Graphics; import java.awt.Image; import java.awt.image.Buffe ...

  4. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  5. 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  6. ImageIo类常用方法以及图片操作

    ImageIo类常用方法以及图片操作 文章目录 ImageIo类常用方法以及图片操作 常用方法 图片操作 结尾 常用方法 读 从图中可以看到有三个重载的方法,返回的类型都是BufferedImage ...

  7. Java图片处理 - 缩放图片

    Java图片处理 - 缩放图片 Java原生代码实现缩放图片 上一章原生代码中执行测试代码: public static void main(String[] args) {/*这儿填写你存放要缩小图 ...

  8. Qt 完成图片的缩放拖动

    1. 事件和函数 主要使用事件paintEvent(QPaintEvent *event)和drawTiledPixmap函数实现绘图. paintEvent事件在改变窗口大小.移动窗口.手动调用up ...

  9. 《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放

    6.6 图像金字塔与图片尺寸缩放 6.6.1 图像金字塔 1.图像金字塔是图像中多尺度表达的一种,主要用于图像分割,是一种以多分辨率解释图像的结构,通过梯次向下采样获得分辨率逐步降低的图象集合 2.分 ...

最新文章

  1. Python之常用的高阶函数——abs、map、reduce、filter、sorted
  2. 【Qt】2D绘图之绘图中其它问题
  3. 为Linux命令起别名
  4. 台湾印象之六:林志玲神话
  5. 深圳本地网店代运营公司
  6. Spinner 学习笔记
  7. 算法竞赛入门经典 第二章总结
  8. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
  9. numpy元素特定条件查找过滤
  10. WPF RadioButton按钮控件取消选中设置
  11. 认真与随便,结果有天壤之别
  12. List集合之LinkedList
  13. Mac OS X 下 U盘安装盘简易制作教程
  14. 王珊数据库系统概论第五版视频课程
  15. Tableau 10.5 安装教程
  16. 灭绝师太(女博士)、李莫愁(女硕士)、黄蓉(本科生)、小龙女(专科生)可爱
  17. Android 关于图片的压缩
  18. 离散信号的抽取和内插例题_抽取和内插
  19. 深圳市专精特新企业申报流程及奖励政策重点介绍,补贴20-50万
  20. 单像素成像图像智能处理算法

热门文章

  1. Python的安装、pycharm的安装及设置
  2. linux 把根目录设置成777权限的补救方法
  3. SpringMVC+MyBatis+Redis开启二级缓存配置
  4. 企业架构(EA)美国之行
  5. Samba 4.10 发布,完全支持 Python 3
  6. MobX详解(二):ES7 装饰器 decorator
  7. 处理python中的无类型变量的方法
  8. maven入门(1-3)maven的生命周期
  9. 英特尔是 Chrome OS 代码的第二大贡献者
  10. 动态调频DVFS_转