利用GDI+处理图像,包括图像的的裁剪显示、转置…
2018-06-17 20:40:34来源:未知 阅读 ()
一、图像的裁剪显示:有时程序需要显示图像的一部分而不是全部。实例代码如下:
CDC* pDC = GetDC(); Graphics graph(pDC->GetSafeHdc()); Image image(_T("Pic.jpg")); // 表示从原图的(20,20)处开始,裁剪宽高为300,400的矩形区域,将其显示在(10,10)处 graph.DrawImage(&image,10,10,20,20,300,400,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, 0, 0); // 输出原图像 // 输出图像的左上角坐标 int nX = 200; int nY = 0; 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, 3);
三、图像的镜像:分为水平与垂直镜像。水平镜像类似镜子,垂直镜像类似于水中的投影。
(1)水平镜像
graph.DrawImage(&image, 0, 0); int nX = 600; int nY = 0; 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, 3);
(2)垂直镜像
graph.DrawImage(&image, 0, 0); int nX = 0; int nY = 400; 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, 3);
四、图像的简单旋转:
(1)图像旋转 90°
int nX = 700; int nY = 0; Point points[] = { Point(nX + nHeight,nY), // 源图像的左上角对应的目标图像的坐标 Point(nX+nHeight,nY+nWidth), // 源图像的右上角对应的目标图像的坐标 Point(nX,nY) // 源图像的左下角对应的目标图像的坐标 }; graph.DrawImage(&image, points, 3);
(2) 图像旋转180°
int nX = 700; int nY = 0; Point points[] = { Point(nX + nWidth,nY + nHeight), // 源图像的左上角对应的目标图像的坐标 Point(nX,nY + nHeight), // 源图像的右上角对应的目标图像的坐标 Point(nX + nWidth,nY) // 源图像的左下角对应的目标图像的坐标 }; graph.DrawImage(&image, points, 3);
五、图像的变形:
int nX = 600; int nY = 0; Point points[] = { Point(nX,nY), // 源图像的左上角对应的目标图像的坐标 Point(nX + nWidth,nY + 0), // 源图像的右上角对应的目标图像的坐标 Point(nX + 60,nY + nHeight) // 源图像的左下角对应的目标图像的坐标 }; graph.DrawImage(&image, points, 3);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 解析一下C++的异常处理 2020-05-15
- 使用错误代码对象进行C++错误处理 2020-04-10
- 图的连通分量(利用邻接表存储信息) 2020-04-02
- 异常处理、动态内存申请在不同编译器之间的表现差异 2020-03-23
- c++中的异常处理 2020-03-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash