利用GDI+处理图像,包括图像的的裁剪显示、转置、镜像、简单旋转、变形等。
一、图像的裁剪显示:有时程序需要显示图像的一部分而不是全部。实例代码如下:
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+处理图像,包括图像的的裁剪显示、转置、镜像、简单旋转、变形等。的更多相关文章
- Matlab利用subplot绘制多个图像
利用subplot绘制多个图像 subplot(m,n,p) subplot是将多个图画到一个平面上的函数,m是行,n是列,p是所要绘制图所在的位置 x = 0:0.1:100; sinY = sin ...
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...
- opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)
ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...
- Image Retargeting - 图像缩略图 图像重定向
Image Retargeting 图像缩略图.图像重定向 前言 这篇文章主要对比DL出现之前的几种上古算法,为了作为DL方法的引子而存在,顺便博客也该更新点新内容上来了,这篇博文就是介绍了我最近在玩 ...
- PHP图像裁剪为任意大小的图像,图像不变形,不留下空白
<?php /** * 说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高 */ fu ...
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- 学习笔记:利用GDI+生成简单的验证码图片
学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name=&quo ...
- C#利用GDI+绘制旋转文字等效果
C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...
随机推荐
- Git简单操作命令
Git 1.创建远程分支(git项目已在) git checkout -b cgy git add . git commit -m “add new branch” git push origin c ...
- js 文件下载 进度条
js: /** * 下载文件 - 带进度监控 * @param url: 文件请求路径 * @param params: 请求参数 * @param name: 保存的文件名 * @param pro ...
- PHP 写文件的例子
$contents = "All the content"; $dir = 'c:'; $file_path = $dir . "\\content.txt"; ...
- IT资产管理详解
- windows下如何修改mysql的端口号
- 2019.02.09 bzoj4710: [Jsoi2011]分特产(容斥原理)
传送门 题意简述:有nnn个人,mmm种物品,给出每种物品的数量aia_iai,问每个人至少分得一个物品的方案数(n,m,每种物品数≤1000n,m,每种物品数\le1000n,m,每种物品数≤10 ...
- 2018.12.30 洛谷P4238 【模板】多项式求逆
传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...
- 2018.11.30 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)
传送门 代码: 先用特殊字符把所有字符串连接在一起. 然后二分答案将sasasa数组分组. 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件. #include<bits/ ...
- Spring boot 集成Dubbo简单版,准备工作,
一.GitHub上找寻Dubbo资源 阿里巴巴在其GitHub上已经写好一个Github案例所以我们只要进入其Git上就可以看到和clone这个项目 二.阿里巴巴GitHub使用 https://gi ...
- font-style字体设置
用到一些字体找起来很麻烦,扒了一些 未测试 HTML,CSS,font-family:中文字体的英文名称 宋体 SimSun黑体 SimHei微软雅黑 Microsoft YaHei微软正黑体 Mic ...