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

CDC* pDC = GetDC();

Graphics graph(pDC->GetSafeHdc());

Image image(_T("Pic.jpg"));

// 表示从原图的(20,20)处开始,裁剪宽高为300,400的矩形区域,将其显示在(10,10)处

graph.DrawImage(&image,,,,,,,UnitPixel);

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中的数据依次对应于源图像的左上角、右上角和左下角的顶点坐标。

graph.DrawImage(&image, , ); // 输出原图像

// 输出图像的左上角坐标

int nX = ;
int nY = ; int nWidth = image.GetWidth();
int nHeight = image.GetHeight(); Point points[] = {
Point(nX,nY),       // 源图像的左上角对应的目标图像的坐标
Point(nX,nY + nWidth),  // 源图像的右上角对应的目标图像的坐标
Point(nX + nHeight,nY) // 源图像的左下角对应的目标图像的坐标
};
graph.DrawImage(&image, points, );

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

(1)水平镜像

graph.DrawImage(&image, , );

int nX = ;
int nY = ; int nWidth = image.GetWidth();
int nHeight = image.GetHeight(); Point points[] = {
Point(nX + nWidth,nY),       // 源图像的左上角对应的目标图像的坐标
Point(nX,nY),           // 源图像的右上角对应的目标图像的坐标
Point(nX + nWidth,nY +nHeight)  // 源图像的左下角对应的目标图像的坐标
};
graph.DrawImage(&image, points, );

(2)垂直镜像

graph.DrawImage(&image, , );

int nX = ;
int nY = ; int nWidth = image.GetWidth();
int nHeight = image.GetHeight(); Point points[] = {
Point(nX ,nY + nHeight),
Point(nX+nWidth,nY +nHeight),
Point(nX,nY )
};
graph.DrawImage(&image, points, );

四、图像的简单旋转:

(1)图像旋转 90°

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

(2) 图像旋转180°

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

五、图像的变形:

int nX = ;
int nY = ;
Point points[] = {
Point(nX,nY),         // 源图像的左上角对应的目标图像的坐标
Point(nX + nWidth,nY + ),    // 源图像的右上角对应的目标图像的坐标
Point(nX + ,nY + nHeight)   // 源图像的左下角对应的目标图像的坐标
};
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. [SoapUI] Property Expansion in soapUI

    1. Property Expansion in soapUI SoapUI provides a common syntax to dynamically insert ("expand& ...

  2. Java页面中EL的${}与<%= request.getParameter%>有什么区别? el 取不到值

    ${requestScope}操作的是request的作用域,相当于request.getAttribute();不过EL比这个更智能些,它不用强制类型转换就可以拿到了真实对象的值.request.g ...

  3. AX_Args

    Args args; FormRun formRun; ; args = new Args(); args.name(formstr(FormName)); args.caller(); args.r ...

  4. 2G内存编译android4.0

    http://blog.csdn.net/leerobin83/article/details/7873229 1.Error occurred during initialization of VM ...

  5. CSS-弹性布局-动画-过渡

    1.弹性布局 1.项目的属性 该组属性只能设置在某项目元素上,只控制一个项目,是不影响容器以及其他项目的效果. 1.order 作用:定义项目的排列顺序,值越小,越靠近起点,默认值是0 取值:整数数字 ...

  6. HDU - 5658

    题意:给你一个字符串,给你Q次询问,每一次问你从l-r里有多少个回文串. 思路:len很小,所以直接遍历区间求就好了. /* gyt Live up to every day */ #include& ...

  7. Oracle启动两个监听

    接上篇:Oracle服务器修改IP后 Oracle服务器更换IP后,办公网络里面可以正常访问了,外地的同事,连了vpn 也可以访问,以为可以收工回家,突然又有同事过来说,机房的服务器ping不通新的i ...

  8. TCP粘包问题分析和解决(全)

    TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...

  9. 关于preg_match() / preg_replace()函数的一点小说明

    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...

  10. 作用域的一些说明,static关键词

    作用域的一些说明 变量分为全局变量和局部变量.学过C语言的童鞋都知道,全局变量的作用域是整个整个文件.在即使在函数内部也有效,但在php中,如果在函数中使用全局变量,php会认为这个变量没有定义.如果 ...