CGAffineTransformMake 矩阵变换 的运算原理
2014-06-20 14:54
204 查看
http://blog.csdn.net/xcysuccess3/article/details/10419387
http://guxiaojje.blog.163.com/blog/static/14094229120131510359399/
1.矩阵的基本知识:
struct CGAffineTransform
{
CGFloat a, b, c, d;
CGFloat tx, ty;
};
CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat
c,CGFloat d,CGFloat tx,CGFloat ty);
为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。
以上参数在矩阵中的表示为:
|a b 0|
|c d 0|
|tx ty 1|
运算原理:原坐标设为(X,Y,1);
|a b 0|
[X,Y, 1] |c d 0| = [aX + cY + tx bX + dY + ty 1] ;
|tx ty 1|
通过矩阵运算后的坐标[aX + cY + tx bX + dY + ty 1],我们对比一下可知:
第一种:设a=d=1, b=c=0.
[aX + cY + tx bX + dY + ty 1] = [X + tx Y + ty 1];
可见,这个时候,坐标是按照向量(tx,ty)进行平移,其实这也就是函数
CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty)的计算原理。
第二种:设b=c=tx=ty=0.
[aX + cY + tx bX + dY + ty 1] = [aX dY 1];
可见,这个时候,坐标X按照a进行缩放,Y按照d进行缩放,a,d就是X,Y的比例系数,其实这也就是函数
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)的计算原理。a对应于sx,d对应于sy。
第三种:设tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。
[aX + cY + tx bX + dY + ty 1] = [Xcos? - Ysin? Xsin? + Ycos? 1] ;
可见,这个时候,?就是旋转的角度,逆时针为正,顺时针为负。其实这也就是函数
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)的计算原理。angle即?的弧度表示。
2.利用上面的变换写一个UIImage矩阵变换的例子:
下面是一个关于image的矩阵运算的例子,无外乎是运用以上三种变换的组合,达到所定义的效果:
http://guxiaojje.blog.163.com/blog/static/14094229120131510359399/
1.矩阵的基本知识:
struct CGAffineTransform
{
CGFloat a, b, c, d;
CGFloat tx, ty;
};
CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat
c,CGFloat d,CGFloat tx,CGFloat ty);
为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。
以上参数在矩阵中的表示为:
|a b 0|
|c d 0|
|tx ty 1|
运算原理:原坐标设为(X,Y,1);
|a b 0|
[X,Y, 1] |c d 0| = [aX + cY + tx bX + dY + ty 1] ;
|tx ty 1|
通过矩阵运算后的坐标[aX + cY + tx bX + dY + ty 1],我们对比一下可知:
第一种:设a=d=1, b=c=0.
[aX + cY + tx bX + dY + ty 1] = [X + tx Y + ty 1];
可见,这个时候,坐标是按照向量(tx,ty)进行平移,其实这也就是函数
CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty)的计算原理。
第二种:设b=c=tx=ty=0.
[aX + cY + tx bX + dY + ty 1] = [aX dY 1];
可见,这个时候,坐标X按照a进行缩放,Y按照d进行缩放,a,d就是X,Y的比例系数,其实这也就是函数
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)的计算原理。a对应于sx,d对应于sy。
第三种:设tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。
[aX + cY + tx bX + dY + ty 1] = [Xcos? - Ysin? Xsin? + Ycos? 1] ;
可见,这个时候,?就是旋转的角度,逆时针为正,顺时针为负。其实这也就是函数
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)的计算原理。angle即?的弧度表示。
2.利用上面的变换写一个UIImage矩阵变换的例子:
下面是一个关于image的矩阵运算的例子,无外乎是运用以上三种变换的组合,达到所定义的效果:
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span class="com" style="color:#8800;">//UIImageOrientation的定义,定义了如下几种变换</span> <span class="kwd" style="color:#0088;">typedef</span><span class="pln"> </span><span class="kwd" style="color:#0088;">enum</span><span class="pln"> </span> <span class="pun" style="color:#66660;">{</span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationUp</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// default orientation</span> <span class="pln"> </span><span class="pun" style="color:#66660;">&</span><span class="pln">nbsp</span><span class="pun" style="color:#66660;">;</span><span class="typ" style="color:#66066;">UIImageOrientationDown</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// 180 deg rotation</span> <span class="pln"> </span><span class="pun" style="color:#66660;">&</span><span class="pln">nbsp</span><span class="pun" style="color:#66660;">;</span><span class="typ" style="color:#66066;">UIImageOrientationLeft</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// 90 deg CCW</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationRight</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// 90 deg CW</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationUpMirrored</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// as above but image mirrored along other axis. horizontal flip</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationDownMirrored</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// horizontal flip</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationLeftMirrored</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// vertical flip</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationRightMirrored</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="com" style="color:#8800;">// vertical flip</span> <span class="pun" style="color:#66660;">}</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientation</span><span class="pun" style="color:#66660;">;</span> <span class="com" style="color:#8800;">//按照UIImageOrientation的定义,利用矩阵自定义实现对应的变换;</span> <span class="pun" style="color:#66660;">-(</span><span class="typ" style="color:#66066;">UIImage</span><span class="pln"> </span><span class="pun" style="color:#66660;">*)</span><span class="pln">transformImage</span><span class="pun" style="color:#66660;">:(</span><span class="typ" style="color:#66066;">UIImage</span><span class="pln"> </span><span class="pun" style="color:#66660;">*)</span><span class="pln">aImage </span> <span class="pun" style="color:#66660;">{</span><span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGImageRef</span><span class="pln"> imgRef </span><span class="pun" style="color:#66660;">=</span><span class="pln"> aImage</span><span class="pun" style="color:#66660;">.</span><span class="typ" style="color:#66066;">CGImage</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGFloat</span><span class="pln"> width </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGImageGetWidth</span><span class="pun" style="color:#66660;">(</span><span class="pln">imgRef</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGFloat</span><span class="pln"> height </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGImageGetHeight</span><span class="pun" style="color:#66660;">(</span><span class="pln">imgRef</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransform</span><span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformIdentity</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGRect</span><span class="pln"> bounds </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGRectMake</span><span class="pun" style="color:#66660;">(</span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> width</span><span class="pun" style="color:#66660;">,</span><span class="pln"> height</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGFloat</span><span class="pln"> scaleRatio </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="lit" style="color:#06666;">1</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGFloat</span><span class="pln"> boundHeight</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientation</span><span class="pln"> orient </span><span class="pun" style="color:#66660;">=</span><span class="pln"> aImage</span><span class="pun" style="color:#66660;">.</span><span class="pln">imageOrientation</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">switch</span><span class="pun" style="color:#66660;">(</span><span class="typ" style="color:#66066;">UIImageOrientationLeftMirrored</span><span class="pun" style="color:#66660;">)</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="pun" style="color:#66660;">{</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationUp</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformIdentity</span><span class="pun" style="color:#66660;">;</span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationUpMirrored</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="pln">width</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformScale</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationDown</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="pln">width</span><span class="pun" style="color:#66660;">,</span><span class="pln"> height</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformRotate</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> M_PI</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationDownMirrored</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="lit" style="color:#06666;">0.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> height</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformScale</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationLeft</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> boundHeight </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width </span><span class="pun" style="color:#66660;">=</span><span class="pln"> boundHeight</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="lit" style="color:#06666;">0.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> width</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformRotate</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">3.0</span><span class="pln"> </span><span class="pun" style="color:#66660;">*</span><span class="pln"> M_PI </span><span class="pun" style="color:#66660;">/</span><span class="pln"> </span><span class="lit" style="color:#06666;">2.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationLeftMirrored</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> boundHeight </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width </span><span class="pun" style="color:#66660;">=</span><span class="pln"> boundHeight</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="pln">height</span><span class="pun" style="color:#66660;">,</span><span class="pln"> width</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformScale</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformRotate</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">3.0</span><span class="pln"> </span><span class="pun" style="color:#66660;">*</span><span class="pln"> M_PI </span><span class="pun" style="color:#66660;">/</span><span class="pln"> </span><span class="lit" style="color:#06666;">2.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationRight</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span><span class="com" style="color:#8800;">//EXIF = 8 </span> <span class="pln"> </span> <span class="pln"> boundHeight </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width </span><span class="pun" style="color:#66660;">=</span><span class="pln"> boundHeight</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeTranslation</span><span class="pun" style="color:#66660;">(</span><span class="pln">height</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformRotate</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> M_PI </span><span class="pun" style="color:#66660;">/</span><span class="pln"> </span><span class="lit" style="color:#06666;">2.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">case</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationRightMirrored</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> boundHeight </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">height </span><span class="pun" style="color:#66660;">=</span><span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">.</span><span class="pln">width </span><span class="pun" style="color:#66660;">=</span><span class="pln"> boundHeight</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformMakeScale</span><span class="pun" style="color:#66660;">(-</span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">1.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> transform </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGAffineTransformRotate</span><span class="pun" style="color:#66660;">(</span><span class="pln">transform</span><span class="pun" style="color:#66660;">,</span><span class="pln"> M_PI </span><span class="pun" style="color:#66660;">/</span><span class="pln"> </span><span class="lit" style="color:#06666;">2.0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">break</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">default</span><span class="pun" style="color:#66660;">:</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="pun" style="color:#66660;">[</span><span class="typ" style="color:#66066;">NSException</span><span class="pln"> </span><span class="kwd" style="color:#0088;">raise</span><span class="pun" style="color:#66660;">:</span><span class="typ" style="color:#66066;">NSInternalInconsistencyException</span><span class="pln"> format</span><span class="pun" style="color:#66660;">:@</span><span class="str" style="color:#0880;">"Invalid image orientation"</span><span class="pun" style="color:#66660;">];</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="pun" style="color:#66660;">}</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIGraphicsBeginImageContext</span><span class="pun" style="color:#66660;">(</span><span class="pln">bounds</span><span class="pun" style="color:#66660;">.</span><span class="pln">size</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextRef</span><span class="pln"> context </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIGraphicsGetCurrentContext</span><span class="pun" style="color:#66660;">();</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">if</span><span class="pln"> </span><span class="pun" style="color:#66660;">(</span><span class="pln">orient </span><span class="pun" style="color:#66660;">==</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationRight</span><span class="pln"> </span><span class="pun" style="color:#66660;">||</span><span class="pln"> orient </span><span class="pun" style="color:#66660;">==</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIImageOrientationLeft</span><span class="pun" style="color:#66660;">)</span><span class="pln"> </span><span class="pun" style="color:#66660;">{</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextScaleCTM</span><span class="pun" style="color:#66660;">(</span><span class="pln">context</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="pln">scaleRatio</span><span class="pun" style="color:#66660;">,</span><span class="pln"> scaleRatio</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextTranslateCTM</span><span class="pun" style="color:#66660;">(</span><span class="pln">context</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="pln">height</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="pun" style="color:#66660;">}</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">else</span><span class="pln"> </span><span class="pun" style="color:#66660;">{</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextScaleCTM</span><span class="pun" style="color:#66660;">(</span><span class="pln">context</span><span class="pun" style="color:#66660;">,</span><span class="pln"> scaleRatio</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="pln">scaleRatio</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextTranslateCTM</span><span class="pun" style="color:#66660;">(</span><span class="pln">context</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="pun" style="color:#66660;">-</span><span class="pln">height</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="pun" style="color:#66660;">}</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextConcatCTM</span><span class="pun" style="color:#66660;">(</span><span class="pln">context</span><span class="pun" style="color:#66660;">,</span><span class="pln"> transform</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">CGContextDrawImage</span><span class="pun" style="color:#66660;">(</span><span class="typ" style="color:#66066;">UIGraphicsGetCurrentContext</span><span class="pun" style="color:#66660;">(),</span><span class="pln"> </span><span class="typ" style="color:#66066;">CGRectMake</span><span class="pun" style="color:#66660;">(</span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> </span><span class="lit" style="color:#06666;">0</span><span class="pun" style="color:#66660;">,</span><span class="pln"> width</span><span class="pun" style="color:#66660;">,</span><span class="pln"> height</span><span class="pun" style="color:#66660;">),</span><span class="pln"> imgRef</span><span class="pun" style="color:#66660;">);</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIImage</span><span class="pln"> </span><span class="pun" style="color:#66660;">*</span><span class="pln">imageCopy </span><span class="pun" style="color:#66660;">=</span><span class="pln"> </span><span class="typ" style="color:#66066;">UIGraphicsGetImageFromCurrentImageContext</span><span class="pun" style="color:#66660;">();</span> <span class="pln"> </span> <span class="pln"> </span><span class="typ" style="color:#66066;">UIGraphicsEndImageContext</span><span class="pun" style="color:#66660;">();</span><span class="pln"> </span> <span class="pln"> </span> <span class="pln"> </span><span class="kwd" style="color:#0088;">return</span><span class="pln"> imageCopy</span><span class="pun" style="color:#66660;">;</span><span class="pln"> </span> <span class="pln"> </span> <span class="pun" style="color:#66660;">}</span><span class="pln"> </span></p>
相关文章推荐
- CGAffineTransformMake 矩阵变换 的运算原理
- CGAffineTransformMake 矩阵变换 的运算原理
- CGAffineTransformMake 矩阵变换 的运算原理
- IOS-CGAffineTransformMake 矩阵变换 的运算原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- 第6月第17天 CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- Core Animation研究系列 : CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算原理
- CGAffineTransformMake 矩阵变换 的运算原理(转)
- 从UIImage的矩阵变换看矩阵运算的原理
- CGAffineTransformMakeRotation改变了center
- CGAffineTransformMake…… 和 CGAffineTransform……的区别
- CGAffineTransformMakeRotation 实现旋转
- 从UIImage的矩阵变换看矩阵运算的原理
- CGAffineTransformMake(a,b,c,d,tx,ty)