一、图像的裁剪显示:有时程序需要显示图像的一部分而不是全部。实例代码如下:

  1. CDC* pDC = GetDC();
  2.  
  3. Graphics graph(pDC->GetSafeHdc());
  4.  
  5. Image image(_T("Pic.jpg"));
  6.  
  7. // 表示从原图的(20,20)处开始,裁剪宽高为300,400的矩形区域,将其显示在(10,10)处
  8.  
  9. graph.DrawImage(&image,,,,,,,UnitPixel);
  10.  
  11. ReleaseDC(pDC);

注意:对于不同的分辨率,这个函数可能对图像进行了缩放,可以通过以下函数进行输出尺寸的控制。

DrawImage(Image* image,const Rect& destRect,INT srcx,INT srcy,INT srcwidth,INT srcheight,Unit srcUnit...),其中destRect表示输出图像的矩形区域。

二、图像的转置:就是将图像的x坐标与y坐标交交换位置。转置于旋转是不同的。转置前的图无法通过旋转得到转置后的图。可以使用以下函数进行转置处理:

Status Graphics::DrawImage(Image* image,const Point* desPoints,INT count);

Status Graphics::DrawImage(Image* image,const PointF* desPoints,INT count);

其中,若count为3时,则表示该多边形是一个平行四边形,另一个顶点由系统自动给出。此时,destPoints中的数据依次对应于源图像的左上角、右上角和左下角的顶点坐标。

  1. graph.DrawImage(&image, , ); // 输出原图像
  2.  
  3. // 输出图像的左上角坐标
  4.  
  5. int nX = ;
  6. int nY = ;
  7.  
  8. int nWidth = image.GetWidth();
  9. int nHeight = image.GetHeight();
  10.  
  11. Point points[] = {
  12. Point(nX,nY),       // 源图像的左上角对应的目标图像的坐标
  13. Point(nX,nY + nWidth),  // 源图像的右上角对应的目标图像的坐标
  14. Point(nX + nHeight,nY) // 源图像的左下角对应的目标图像的坐标
  15. };
  16. graph.DrawImage(&image, points, );

三、图像的镜像:分为水平与垂直镜像。水平镜像类似镜子,垂直镜像类似于水中的投影。

(1)水平镜像

  1. graph.DrawImage(&image, , );
  2.  
  3. int nX = ;
  4. int nY = ;
  5.  
  6. int nWidth = image.GetWidth();
  7. int nHeight = image.GetHeight();
  8.  
  9. Point points[] = {
  10. Point(nX + nWidth,nY),       // 源图像的左上角对应的目标图像的坐标
  11. Point(nX,nY),           // 源图像的右上角对应的目标图像的坐标
  12. Point(nX + nWidth,nY +nHeight)  // 源图像的左下角对应的目标图像的坐标
  13. };
  14. graph.DrawImage(&image, points, );

(2)垂直镜像

  1. graph.DrawImage(&image, , );
  2.  
  3. int nX = ;
  4. int nY = ;
  5.  
  6. int nWidth = image.GetWidth();
  7. int nHeight = image.GetHeight();
  8.  
  9. Point points[] = {
  10. Point(nX ,nY + nHeight),
  11. Point(nX+nWidth,nY +nHeight),
  12. Point(nX,nY )
  13. };
  14. graph.DrawImage(&image, points, );

四、图像的简单旋转:

(1)图像旋转 90°

  1. int nX = ;
  2. int nY = ;
  3.  
  4. Point points[] = {
  5. Point(nX + nHeight,nY),    // 源图像的左上角对应的目标图像的坐标
  6. Point(nX+nHeight,nY+nWidth), // 源图像的右上角对应的目标图像的坐标
  7. Point(nX,nY)          // 源图像的左下角对应的目标图像的坐标
  8. };
  9. graph.DrawImage(&image, points, );

(2) 图像旋转180°

  1. int nX = ;
  2. int nY = ;
  3. Point points[] = {
  4. Point(nX + nWidth,nY + nHeight), // 源图像的左上角对应的目标图像的坐标
  5. Point(nX,nY + nHeight),      // 源图像的右上角对应的目标图像的坐标
  6. Point(nX + nWidth,nY)      // 源图像的左下角对应的目标图像的坐标
  7. };
  8. graph.DrawImage(&image, points, );

五、图像的变形:

  1. int nX = ;
  2. int nY = ;
  3. Point points[] = {
  4. Point(nX,nY),         // 源图像的左上角对应的目标图像的坐标
  5. Point(nX + nWidth,nY + ),    // 源图像的右上角对应的目标图像的坐标
  6. Point(nX + ,nY + nHeight)   // 源图像的左下角对应的目标图像的坐标
  7. };
  8. graph.DrawImage(&image, points, );

利用GDI+处理图像,包括图像的的裁剪显示、转置、镜像、简单旋转、变形等。的更多相关文章

  1. Matlab利用subplot绘制多个图像

    利用subplot绘制多个图像 subplot(m,n,p) subplot是将多个图画到一个平面上的函数,m是行,n是列,p是所要绘制图所在的位置 x = 0:0.1:100; sinY = sin ...

  2. 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  3. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...

  4. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  5. Image Retargeting - 图像缩略图 图像重定向

    Image Retargeting 图像缩略图.图像重定向 前言 这篇文章主要对比DL出现之前的几种上古算法,为了作为DL方法的引子而存在,顺便博客也该更新点新内容上来了,这篇博文就是介绍了我最近在玩 ...

  6. PHP图像裁剪为任意大小的图像,图像不变形,不留下空白

    <?php /** * 说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高 */ fu ...

  7. Atitti 图像处理 图像混合 图像叠加 blend 原理与实现

    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...

  8. 学习笔记:利用GDI+生成简单的验证码图片

    学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name=&quo ...

  9. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

随机推荐

  1. HashMap 、HashTable、TreeMap、WeakHashMap的区别是什么

    Java为数据结构中的映射定义了一个接口java.util.Map,它有4个实现类:HashTable.HashMap.TreeMap.WeakHashMap. HashMap和HashTable的区 ...

  2. [Robot Framework] 调用ExcelLibrary

    安装ExcelLibrary for Robot Framework 参考 : http://navinet.github.io/robotframework-excellibrary/ 打开wind ...

  3. docker下安装tensorflow

    一,查找镜像 root@xushi:~# docker search tensorflow NAME DESCRIPTION STARS OFFICIAL AUTOMATED tensorflow/t ...

  4. jsp页面错误的全局处理

    网上搜索spring mvc项目全局异常处理: 大致可以找到两种方案 : 方案1: ExceptionHandlerResolver . spring 提供了两种默认实现,当然你也可以自己实现.. 方 ...

  5. word中括号中公式对齐

    在写论文中使用到括号,但没有对齐,如: 但是我需要对齐,如: 此时只需要在每行需要对齐的地方输入‘&’即可(此符号在专业型括号是不可见的,在线性中可见,上图为专业型),同样也可以有多个对齐点, ...

  6. JavaScript函数和内置对象

    一.函数 function f1(){ console.log("666"); } f1(); //调用函数 1.普通函数定义 function f1(a,b){ console. ...

  7. 导入CA证书报错 keytool error: java.lang.Exception: Input not an X.509 certificate

    导入CA证书报错: keytool error: java.lang.Exception: Input not an X.509 certificate 如果你的CA证书是如下格式的: -----BE ...

  8. 2019.02.07 bzoj1487: [HNOI2009]无归岛(仙人掌+树形dp)

    传送门 人脑转化条件过后的题意简述:给你一个仙人掌求最大带权独立集. 思路:跟这题没啥变化好吗?再写一遍加深记忆吧. 就是把每个环提出来分别枚举环在图中的最高点选还是不选分别dpdpdp一下即可,时间 ...

  9. 2018.11.17 bzoj4259: 残缺的字符串(fft)

    传送门 fftfftfft套路题. 我们把aaa ~ zzz映射成111 ~ 262626,然后把∗*∗映射成000. 考虑对于两个长度都为nnn的字符串A,BA,BA,B. 我们定义一个差异函数di ...

  10. Lagrange 乘子法求最优解

    clc clear syms x y z r1 r2 w f=x^+y^+z^+w^; g1=*x-y+z-w-; g2=x+y-z+w-; h=f-r1*g1 -r2*g2; hx=diff(h,x ...