[转]使用CGContextDrawImage绘制图片上下颠倒

  • 转自:http://www.bennychen.cn/tag/cgcontextdrawimage/
  • 使用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前通过矩阵垂直翻转坐标系

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

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

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

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

1// uiImage是将要绘制的UIImage图片,width和height是它的宽高
2 
3// 图片被颠倒的绘制到context
4CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);
5 
6// 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)
7glMatrixMode(GL_PROJECTION);
8glLoadIdentity();
9glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );
深度学习+遥感:2025最新土地利用分类资源大全(数据集/论文/代码) 近年来,深度学习在遥感影像土地利用分类领域取得了突破性进展,从传统的农田、森林识别,到复杂的城市功能区划分,AI正在重新定义我们对地表覆盖的认知。无论是科研还是工程应用,高质量数据集、前沿算法和开源工具都是成功的关键。本文精心整理了2024年最值得关注的土地利用分类资源,包括:✅ 10+个权威数据集(覆盖全球、多分辨率、多光谱/雷达)✅ 15+篇顶会论文(CNN/Transformer/自监督学习等SOTA方法)✅ 6大开源工具箱(PyTorch/Keras实现,即拿即用) 阅读详情

相关推荐

Ubuntu终端接入Codex:一行脚本搞定AI编程助手安装与配置

在开发者日常工作中,命令行终端是最高频的操作环境,而AI编程助手的出现正在改变传统的编码方式。通过将大模型能力与终端工具链结合,开发者无需切换窗口即可完成命令查询、代码生成、项目理解和自动执行等任务。Ubuntu作为服务器和开发机的主流系统,搭配Node.js生态和API Key认证,即可在本地闭环运行AI助手。本文从环境准备、密钥配置、权限管理到自动化脚本封装,系统拆解在终端中接入Codex的完整流程,并分享高频用法与实测排障经验,帮助开发者安全、高效地让AI融入命令行工作流。

weixin_29061041的博客 321

Mac,iOS界面中的三维坐标系

一. 三维坐标系 据说有一次笛卡尔生病了,躺在床上休息,但是他的大脑却没有休息,一只在寻思着通过什么手段把几何图形和代数方程关联起来,也就是几何图形中的每一个点怎么和方程的每一组解关联起来。这个时候他看到房顶上有一只蜘蛛在织网,蜘蛛空中爬来爬去。他想地上墙角的三面墙相交出三条线,把墙角作为原点,把这三条线作为数轴,那么蜘蛛某刻的位置可以通过这三条数轴上的数来表示,反过来,给定一组数便可以确定

benbenxiongyuan的专栏 4845

信道估计准则演进:从LS、MMSE到LMMSE的工程权衡

本文深入探讨了信道估计准则的演进历程,从LS、MMSE到LMMSE的工程权衡。通过对比分析三大经典算法的数学本质、工程实现及适用场景,揭示了在计算复杂度、实时性和性能之间的关键取舍。文章结合4G/5G基站项目实战经验,提供了算法选型的三维决策模型和前沿发展建议,为无线通信系统设计提供实用指导。

weixin_29327525的博客 281

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

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Georgia; color: #101010} p.p2 {margin: 0.0px 0.0px 20.0px 0.0px; line-height: 22.0px; fo

trandy的专栏 1万+

Unity+Hybridclr发布WebGL记录

问题不多,比预想中的顺利,如果遇到问题建议先看Hybridclr的常见问题里面有没有解决方案,没遇到Hybridclr的报错,所以记录的问题里面没有Hybridclr相关的。导出设置里的压缩格式选择了Brotli,而服务器或浏览器不支持,据说是可以拓展服务器配置使支持Brotli,但是由于我本人是IIS小白,所以换了种压缩格式,在publishing Settings修改Compression Fromat为Gzip。3.在浏览器运行之后视图一直闪烁。,修改配置,这个网上很常见。

a598211757的博客 1037

stm32f103c8t6的中文字库

stm32的成熟中文字库,上手即用,操作简单

nbbskk的博客 3653

ISO14649中各个坐标系

1、feature coordinate system feature_placement:特征相对于工件坐标系的位置,它(其实是一个坐标变换矩阵)将工件坐标系的原点转换成特征坐标系的原点。 2、setup coordinate system setup包括有关工件坐标系位置的信息。its_origin将机床坐标系的原点转换成装夹坐标系的原点 3、workpiece coordinate syst...

qq_43238450的博客 1377

MATLAB信号处理实战:VMD分解参数调优全指南(附避坑技巧)

本文深入探讨了MATLAB中变分模态分解(VMD)的核心参数调优实战技巧。针对模态数K和惩罚系数α的选择难题,提供了从经验估计、可视化观察到量化指标辅助的渐进式调优框架,并分享了避免过分解与欠分解的实用避坑指南,旨在帮助工程师高效处理非平稳信号,提取清晰的物理特征。

weixin_29079671的博客 144

使用CGContextDrawImage绘制图片上下颠倒解决方法

使用CGContextDrawImage绘制图片上下颠倒解决方法

jueyi1127的博客 2895

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 621

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

ios 图像坐标系_iOS图层的坐标系,几何和变换

坐标系图层有两种坐标系,分别是基于点坐标系和基于单元坐标系。这两种坐标系的圆点都在左上角,向右为正x,向下为正y。点坐标系图层的位置使用点坐标系。通常用bounds和position属性来指定图层的大小和位置。bounds属性定义了图层的坐标系统和包含在屏幕中的尺寸,position属性定义它相对于父坐标系的位置。即便图层有frame属性,但它是由bounds和position推导而来的,并太常用...

weixin_34665982的博客 540

科研绘图系列:R语言circos图(circos plot)

科研绘图系列:R语言circos图(circos plot)

专注生信领域 3430

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

使用CGContextDrawImage绘制图片上下颠倒    首先要说的是,在iOS的不同framework中使用着不同的坐标系 : UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上     UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和事件驱动

huifeidexin_1的专栏 3222

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用CGContextDrawImage绘制图片上下颠倒

使用CGContextDrawImage绘制图片上下颠倒    首先要说的是,在iOS的不同framework中使用着不同的坐标系 : UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上     UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和事件驱动

wanglang3081的专栏 1494

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS 绘制图片上下颠倒

使用CGContextDrawImage绘制图片上下颠倒    首先要说的是,在iOS的不同framework中使用着不同的坐标系 : UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上     UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和

风雨兼程 2453

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

CGContextDrawImage画图图形相反 镜像

问: Does anyone know why CGContextDrawImage would be drawing my image upside down? I am loading an image in from my application: UIImage *image = [UIImage imageNamed:@"testImage.png"]; And then

SlimApp 4950

OpenGL ES (一.绘制图片上下颠倒)

使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系: UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上 UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和事件驱动的基

Ysam1983的专栏 3386

ios-绘图之图片上下颠倒

原文:http://blog.youkuaiyun.com/trandy/article/details/6617272 使用CGContextDrawImage绘制图片上下颠倒    首先要说的是,在iOS的不同framework中使用着不同的坐标系 : UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上  

jkxiaoxue1218的博客 825

iOS开发与OpenGL ES 绘制图片上下颠倒

使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系: UIKit - y轴向下Core Graphics(Quartz) - y轴向上OpenGL ES - y轴向上 UIKit是iPhone SDK的CocoaTouch层的核心framework,是iPhone应用程序图形界面和事件驱动的基础,它和传统的wi

yick8799的专栏 1145

iOS开发与OpenGL ES相关问题整理(2)- 绘制图片上下颠倒

转载自:http://www.bennychen.cn/2011/05/ios开发与opengl-es相关问题整理(2)-绘制图片上下颠倒/ 使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系: UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 Open

客亦知夫水与月乎? 1908

iOS绘图系列四:绘制文字和图像CGContextDrawImage,drawInRect:,drawAtPoint:, UIGraphicsBeginImageContext

绘制图形和文字之前需要了解两个坐标系统. Upper-left-origin coordinate system (ULO) :左上为起始点的坐标系统,UIKit and Core Animation框架用的是这个坐标系统. Lower-left-origin coordinate system (LLO) :左下为起始点坐标系统,Core Graphics框架是这个坐标系统. 这两

lcl130的专栏 1万+
上一篇: IOS-DEMO6 LayerMask
下一篇: url 编码(percentcode 百分号编码)
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值