`
jiapumin
  • 浏览: 344845 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS开发图像处理--绘制图片上下颠倒

 
阅读更多

使用CGContextDrawImage绘制图片上下颠倒
  

     首先要说的是,在iOS的不同framework中使用着不同的坐标系 :
UIKit - y轴向下
Core Graphics(Quartz) - y轴向上
OpenGL ES - y轴向上
   

     UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和事件驱动的基础,它和传统的windows桌面一样,坐标系是y轴向下的; Core Graphics(Quartz)一个基于2D的图形绘制引擎,它的坐标系则是y轴向上的;而OpenGL ES是iPhone SDK的2D和3D绘制引擎,它使用左手坐标系,它的坐标系也是y轴向上的,如果不考虑z轴,在二维下它的坐标系和Quartz是一样的。


    现在回到问题,当通过CGContextDrawImage绘制图片到一个context中时,如果传入的是UIImage的CGImageRef,因为UIKit和CG坐标系y轴相反,所以图片绘制将会上下颠倒。解决方法有以下几种

解决方法一:在绘制到context前通过矩阵垂直翻转坐标系

 

 

[cpp] view plaincopy
 
  1. // uiImage是将要绘制的UIImage图片,width和height是它的宽高  
  2. CGContextTranslateCTM(context, 0, height);  
  3. CGContextScaleCTM(context, 1.0, -1.0);  
  4. CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);  


解决方法二:使用UIImage的drawInRect函数,该函数内部能自动处理图片的正确方向

 

 

[cpp] view plaincopy
 
  1. // uiImage是将要绘制的UIImage图片,width和height是它的宽高  
  2. UIGraphicsPushContext( context );  
  3. [uiImage drawInRect:CGRectMake(0, 0, width, height)];  
  4. UIGraphicsPopContext();  


解决方法三:垂直翻转投影矩阵

 

这种方法通过设置上下颠倒的投影矩阵,使得原本y轴向上的GL坐标系看起来变成了y轴向下,并且坐标原点从屏幕左下角移到了屏幕左上角。如果你习惯使用y轴向下的坐标系进行二维操作,可以使用这种方法,同时原本颠倒的图片经过再次颠倒后回到了正确的方向:

 

[cpp] view plaincopy
 
  1. // uiImage是将要绘制的UIImage图片,width和height是它的宽高  
  2.   
  3. // 图片被颠倒的绘制到context  
  4. CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);  
  5.   
  6. // 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)  
  7. glMatrixMode(GL_PROJECTION);  
  8. glLoadIdentity();  
  9. glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );  
分享到:
评论

相关推荐

    iOS开发视频教程

    资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...

    iOS图形图像处理-打造自己的美图app

    在iOS平台上,开发美图应用的关键在于理解和掌握图形图像处理技术。本文主要聚焦于iOS的图形处理框架,特别是Quartz 2D和Core Image,它们是实现图片编辑、滤镜和界面美化的核心工具。 首先,Quartz 2D是iOS中的2D...

    iOS开发进阶篇-成为一个iOS开发高手

    在iOS开发领域,掌握进阶技术是提升个人技能的关键步骤,这将使你从众多开发者中脱颖而出。"iOS开发进阶篇-成为一个iOS开发高手"这份资料正为此目标提供了全面的指导。它深入探讨了iOS开发的核心概念和技术,旨在...

    【iOS开发源码系列】图像处理源代码

    资源名称:【iOS开发源码系列】图像处理源代码资源目录:【】【iOS图像】360-Degree-Panorama-master【】【iOS图像】AGMedallionView-master【】【iOS图像】AGSimpleImageEditorView-master【】【iOS图像】...

    UI第一章:无限互联iOS开发教程课件-- iPhone开发入门

    ### UI第一章:无限互联iOS开发教程课件 -- iPhone开发入门 #### iOS系统概述与架构 - **iOS系统**:作为苹果公司专为iPhone、iPod touch及iPad设计的操作系统,iOS自诞生以来就以其简洁易用的特点受到全球用户的...

    ios开发 AES-128-ECB加密

    之前遇到的需求,ios上没有类似的实现。搞了好久在网上搜了很多资料都不能解决最后找到了一个c/c++的底层源码,才实现了最后整理了下上传了。是个ios的demo很详细你定能看懂的。运行在xcode环境下,关键算法的文件是...

    vuforia-sdk-ios-7-1-31

    2. **iOS兼容性**:vuforia-sdk-ios-7-1-31明确指出它适用于iOS 7.1版本及以上,这意味着开发者可以利用这个SDK为运行iOS 7.1及更高版本的iPhone和iPad创建AR应用。然而,随着新版本的iOS系统不断更新,开发者需要...

    Object-Cios苹果app开发入门object-c例子demo14个实例 一般编程问题

    【Object-C】ios苹果app开发入门object-c例子demo14个实例 一般编程问题 【实例简介】 ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例 【实例截图】 【核心代码】 归档 ├── Air...

    iOS开发进阶-完整版

    根据提供的信息,我们可以推断出这是一本关于iOS开发进阶的书籍,作者为唐巧。虽然提供的部分内容似乎并不是实际的章节内容,但从标题、描述和标签中,我们可以推测本书可能涵盖的一些关键知识点。 ### iOS开发进阶...

    iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8.zip

    《iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8》 这个压缩包文件“iliu-ios-cocos2d-viking-cba07f8.zip”显然包含了iOS平台上一个基于Cocos2D的游戏或应用的源代码。Cocos2D是一个广泛使用的2D游戏开发...

    swift-iOS-CoreML-Yolo在CoreML框架上使用TinyYOLOv1模型实现对象检测

    这个项目,"swift-iOS-CoreML-Yolo",是专为iOS设备设计的,利用强大的机器学习能力来识别和定位图像中的特定对象。下面我们将详细探讨这个过程涉及的关键知识点。 首先,我们要理解CoreML是什么。CoreML是Apple...

    ios-表盘绘制-swift.zip

    这个项目"ios-表盘绘制-swift.zip"是基于Swift编程语言实现的一个可自定义的表盘视图,它包含了指针动画功能,用户可以根据自己的需求进行修改。以下是对该项目的详细解析: 首先,我们要了解Swift语言。Swift是...

    思科 cisco ios 镜像 C3640-JK.BIN

    思科 cisco ios 镜像 C3640-JK.BIN 文件由多位CCIE水平人员测试使用后拷贝,dy下可用

    ios-LGLChart--绘制折线图、直方图.zip

    一个对绘制【折线图】、【直方图】进行封装的 Demo,主要用 CAShaperLayer 和 UIBezierPath 来实现,使用方法简单,感兴趣的可以看一下,顺便给个 Star ~~ Git地址: https://github.com/luoguilin/LGLChart

    iOS 仿抖音 Object-C

    通过摘取整体框架中的核心逻辑,并简化代码实现过程,保留核心功能如IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容的实现细节,读者将获得对iOS开发核心原理的深入认识。 适合人群:具备一定编程基础,...

    iPhone开发入门到精通视频教程

    资源名称:iPhone开发入门到精通视频教程资源目录:【】iOS开发源码系列---工具【】iOS开发源码系列---应用【】iOS开发源码系列---游戏【】iOS开发源码系列---类库与框架【】iOS开发真机测试与发布【】iOS开发视频...

    iOS开发进阶-唐巧.pdf

    第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...

    iOS应用开发指南-SwiftUI版

    iOS应用开发指南-SwiftUI版

    iOS开发-图片离线鉴黄 基于TensorFlow nsfw oc版.zip

    在iOS开发中,图片离线鉴黄是一项关键的技术,它涉及到人工智能和深度学习领域,特别是利用TensorFlow这一强大的机器学习框架。在这个项目中,我们关注的是一个基于TensorFlow的非安全成人内容(Not Safe For Work,...

    ios-声音波形绘制.zip

    总的来说,"ios-声音波形绘制.zip"的项目涵盖了iOS音频处理、图形绘制、动画和界面设计等多个方面,对于iOS开发者来说,这是一个很好的学习和实践资源。通过深入研究这个项目,你可以掌握如何在iOS应用中实现动态...

Global site tag (gtag.js) - Google Analytics