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

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. 增加samba用户提示Failed to add entry for user

    1.首先在Ubuntu安装好samba,具体步骤为:安装samba:sudo apt-get install samba安装smbclient:sudo apt-get install 安装smbfs ...

  2. [ ZooKeeper]ZooKeeper 的功能和原理

    Zookeeper功能简介: ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  3. wordvec_词的相似度

    import gensimfrom gensim.models import word2vecimport loggingimport jiebaimport osimport numpy as np ...

  4. firefox 之 event兼容写法

    event 在 IE 和 FF(Firefox) 中是不兼容的,IE 中可以直接使用 event 对象,而 FF 中则不可以,解决方法之一如下: var event = window.event || ...

  5. 别人的Linux私房菜(2)Linux简介

    同一操作系统无法在不同硬件平台上运行.架构. Bell实验室和麻省理工学院MIT和通用电气公司GE发起了Multics计划,分时兼容系统,300以上多终端连接主机. Unics 由Multics中的人 ...

  6. linux学习--查看操作系统版本及cpu及内存信息

    查看版本当前操作系统内核信息 uname -a 查看当前操作系统版本信息 cat  /proc/version 查看物理cpu个数: cat /proc/cpuinfo| grep "phy ...

  7. 开启笔记本win7的虚拟热点笔记本变成wifi

    工具/原料 windows 7电脑一台 步骤/方法 1 开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费和路由器购买费 ...

  8. 开机logo以及两种修改开机动画方法

    Android开机画面总共有三屏 一.第一屏:开机logo 1.选张png格式的图片,在Linux任意下执行(安装工具): sudo apt-get install pnmtoplainpm 2.在所 ...

  9. tp5 excel导出类

    1.引入Loader use think\Loader; 2.导出方法: /** * excel表格导出 * @param string $fileName 文件名称 * @param array $ ...

  10. redis-server进程CPU百分百问题

    结论:待确认是否为redis的BUG,原因是进程实际占用的内存远小于配置的最大内存,所以不会是内存不够需要淘汰.CPU百分百redis-server进程集群状态:slave临时解决办法:使用gdb将d ...