iOS将image转90,180,270度的方法

摘要:
http://blog.sina.com.cn/s/blog_6602ffbc0101ckx3.html这里我们要分享的是旋转图像,而不是imageView。其原理是使用quartz2D绘制图片,然后使用ctm进行旋转。注意:quartz2D图纸的左侧与oc中图纸的左侧不同,导致图片倒置。首先,使其为正值,然后进一步旋转+(UIImage*)图像:(UI

http://blog.sina.com.cn/s/blog_6602ffbc0101ckx3.html

这里要分享的是将image旋转,而不是将imageView旋转,原理就是使用quartz2D来画图片,然后使用ctm变幻来实现旋转。

注:quartz2D的绘图左边和oc里面的绘图左边不一样,导致绘画出的图片是反转的。所以一上来得使它转正再进行进一步的旋转等
 

+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation

{

    long double rotate = 0.0;

    CGRect rect;

    float translateX = 0;

    float translateY = 0;

    float scaleX = 1.0;

    float scaleY = 1.0;

    

    switch (orientation) {

        case UIImageOrientationLeft:

            rotate = M_PI_2;

            rect = CGRectMake(0, 0, image.size.height, image.size.width);

            translateX = 0;

            translateY = -rect.size.width;

            scaleY = rect.size.width/rect.size.height;

            scaleX = rect.size.height/rect.size.width;

            break;

        case UIImageOrientationRight:

            rotate = 3 * M_PI_2;

            rect = CGRectMake(0, 0, image.size.height, image.size.width);

            translateX = -rect.size.height;

            translateY = 0;

            scaleY = rect.size.width/rect.size.height;

            scaleX = rect.size.height/rect.size.width;

            break;

        case UIImageOrientationDown:

            rotate = M_PI;

            rect = CGRectMake(0, 0, image.size.width, image.size.height);

            translateX = -rect.size.width;

            translateY = -rect.size.height;

            break;

        default:

            rotate = 0.0;

            rect = CGRectMake(0, 0, image.size.width, image.size.height);

            translateX = 0;

            translateY = 0;

            break;

    }

    

    UIGraphicsBeginImageContext(rect.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    //做CTM变换

    CGContextTranslateCTM(context, 0.0, rect.size.height);

    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextRotateCTM(context, rotate);

    CGContextTranslateCTM(context, translateX, translateY);

    

    CGContextScaleCTM(context, scaleX, scaleY);

    //绘制图片

    CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage);

    

    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

    

    return newPic;

}

免责声明:文章转载自《iOS将image转90,180,270度的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js中进行金额计算linux(centos7)中安装7z下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DropDownList无刷新级联下拉(固定级联),Jquery获取JOSN数据

1.HTML页面 <td align="left">                                <asp:DropDownList ID="ddlOne" runat="server">                                </asp:DropDownList>      ...

iOS- CoreData 数据库管理利器!

1.前文                              上次用SQLite3实现了数据管理,这次准备用CoreData来实现。 Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据 相比SQLite3来说,用CoreDa...

canvas 图片拖拽旋转之一——坐标转换translate

引言 对canvas中绘制的图片进行旋转操作,需要使用ctx.translate变换坐标系,将图片旋转的基点设为坐标系的原点,然后ctx.rotate旋转。 这个时候,因为canvas坐标系发生了旋转,而视觉感受上的坐标以及鼠标事件中的坐标都是旋转之前的屏幕坐标系。再根据鼠标的移动去控制canvas中的图片时,就会出现问题。 用A坐标系中的偏移来控制B坐标...

TextView跑步灯效果及在特殊情况下无效的解决方式

概述:  关于在TextView中使用跑马灯效果的样例在网上一搜一大把。他们可能会让你像以下这样来在xml中定义TextView控件的属性。而事实也确是如此。 只是我不知道他们有没有遇到和我一样的问题(事实上我感觉是有的),我们第一次执行程序的时候。跑马灯没有效果,当我们关闭activity或是fragment再次进入的时候。跑马灯的效果又有了。 普通...

React 高级指引

1、代码分隔 大多数的React应用都会使用Webpack或Browserify这类的构建工具来打包文件。打包是一个将文件引入并合并 到一个单独文件的过程。接着在页面上引入该捆绑,整个应该即可一次性加载! 代码分隔是由诸如Webpack(代码分隔)和诸如因字束缚(factor-bundle)这类打包器支持的一项技术,能够创建 多个包并在运行时动态加载; 1...

ASP.NET Core系列:中间件

1. 概述 ASP.NET Core中的中间件是嵌入到应用管道中用于处理请求和响应的一段代码。 2.使用 IApplicationBuilder 创建中间件管道 2.1 匿名函数 使用Run, Map, Use ,MapWhen等扩展方法来实现。 usingMicrosoft.AspNetCore.Builder; usingMicrosoft.AspN...