GDI+旋转图片的几种方法

1. 使用旋转矩阵

POINT imgRotateCenterPos={10,10}; //旋转中心在图片坐标(相对于图片本身)

CRect rcShow(imgShowRect); //图片要绘制的位置区域.

//把 相对于图片的旋转中心坐标  转换为  绘制区域的坐标

PointF centerPos(imgRotateCenterPos.x+rcShow.left, imgRotateCenterPos.y+rcShow.top);

Matrix mtr;?

//先把源点移动到旋转中心点

mtr.Translate(centerPos.x, centerPos.y);

//旋转一度角度

mtr.Rotate(m_angle);

//还原源点

mtr.Translate(-centerPos.x, -centerPos.y);

//注: 前3个函数的调用, 等价于这一个函数 mtr.RotateAt(angle, centerPos);

//对gp设置变换矩阵

gp.SetTransform(&mtr);

//在某个起点显示图像

gp.DrawImage(pImg, rcShow.left,rcShow.top,rcShow.Width(), rcShow.Height());

2. 直接使用Graphic的方法

POINT imgRotateCenterPos={10,10}; //旋转中心在图片坐标(相对于图片本身)

CRect rcShow(imgShowRect); //图片要绘制的位置区域.

//把 相对于图片的旋转中心坐标  转换为  绘制区域的坐标

PointF centerPos(imgRotateCenterPos.x+rcShow.left, imgRotateCenterPos.y+rcShow.top);

gp.TranslateTransform(centerPos.x,centerPos.y); //源点移动到旋转中心

gp.RotateTransform(m_angle); //旋转

gp.TranslateTransform(-centerPos.x, -centerPos.y);//还原源点

//在某个起点显示图像

gp.DrawImage(pImg, rcShow.left,rcShow.top,rcShow.Width(), rcShow.Height());

3. 使用旋转点

POINT imgRotateCenterPos={10,10}; //旋转中心在图片坐标(相对于图片本身)

CRect rcShow(imgShowRect); //图片要绘制的位置区域.

//把 相对于图片的旋转中心坐标  转换为  绘制区域的坐标

PointF centerPos(imgRotateCenterPos.x+rcShow.left, imgRotateCenterPos.y+rcShow.top);

// 定义一个单位矩阵,坐标原点在表盘中央

//Matrix matrixH(1,0,0,1,posX,posY);

Matrix matrixH;

// 时针旋转的角度度,  这里跟前面一样

matrixH.Translate(centerPos.x, centerPos.y);

matrixH.Rotate(m_angle);

matrixH.Translate(-centerPos.x,-centerPos.y);

这里的三个点的解释: 这三个点决定了一个平行四边形区域, 这个区域是目标绘图区域.

第一个点是目标区域(left,top), 第二个点(right,top), 第三个点(left,bottom)

Point pointsH[] = { Point(rcShow.left, rcShow.top),Point(rcShow.right, rcShow.top),Point(rcShow.left, rcShow.bottom)};

// 用该矩阵转换points

matrixH.TransformPoints( pointsH, 3);

gp.DrawImage (pImg, pointsH, 3);

如果要在同一个dc中显示多个不同旋转点的图, 需要使用ResetTransform恢复矩阵后, 再绘制其它

时间: 2024-08-30 02:39:55

GDI+旋转图片的几种方法的相关文章

ios图片拉伸两种方法

ios图片拉伸两种方法 UIImage *image = [UIImage imageNamed:@"qq"]; 第一种: // 左端盖宽度 NSInteger leftCapWidth = image.size.width * 0.5f; // 顶端盖高度 NSInteger topCapHeight = image.size.height * 0.5f; // 重新赋值 image = [image stretchableImageWithLeftCapWidth:leftCapW

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用TextView支持部分Html的特性,直接用api赋图片.代码如下: //第一种方法在TextView中显示图片 String html = "<img src='" + R.drawable.circle + "'/>"; ImageGetter imgGett

DISCUZ论坛添加页头及页尾背景图片的几种方法

先给大家分享页头添加背景图片的两种方法: 1. 第一种效果,是给discuz的整体框架添加背景图片,见图示: 添加方法如下:找到你现在使用模板common文件下的header.html文件,在<head></head>部分添加以下代码: <style>body { background-image:url(你的背景图片地址,如http://abc.com/imgs/bg.jpg); background-repeat:no-repeat; background-posi

UIImage加载图片的两种方法区别

Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数也是图片文件的路径. 那么两种有什么区别吗? 肯定是有的.根据Apple的官方文档: imageNamed: 这 个方法用一个指定的名字在系统缓存中查找并返回一个图片对象如果它存在的话.如果缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这 个对象.因此imageNamed的优点是当加载时会缓存图

JAVA之设置背景图片的几种方法

 第一种方法,通过JLabel来装载图片. 创建一个ImageIcon对象,来获取背景图片. ImageIcon img = new ImageIcon("image/img1.png"); 创建一个JLabel对象,将图片img载入到JLabel对象中. JLabel jl_bg = new JLabel(img); //背景 然后,设置jl_bg的位置和大小. this.jl_bg.setBounds(0, 0, 600, 400); //设置位置和大小,先setLayout(

swing-窗体添加背景图片的2种方法

在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍.1.利用JLabel加载图片利用JLabel自带的setIcon(Icon icon)加载icon,并设置JLabel对象的位置和大小使其完全覆盖窗体.这是一个很取巧的办法,代码非常简单,如下所示. JLabel lbBg = new JLabel(imageIcon); lbBg.setBounds(0, 0, frameSize.width, frameSize.height); this.getC

python批量下载图片的三种方法

一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: selenium则提供了Chrome,IE,FireFox等的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(包括修改元素)和读取html里面的元素.不足是selenium只提供对python2.6和2.7的支持. 三是用python自带的

Android--从网络获取图片的三种方法

android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;Drawable drawable = loadImageFromNetwor

python 读取并显示图片的两种方法

在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. 显示图片 import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np lena = mpimg.imread('lena.png')