您的位置:首页 > 其它

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的矩阵运算的例子,无外乎是运用以上三种变换的组合,达到所定义的效果:

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: