-
使用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是它的宽高23// 图片被颠倒的绘制到context4CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);56// 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)7glMatrixMode(GL_PROJECTION);8glLoadIdentity();9glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 )
相关推荐
OpenGL ES与OpenGL 的区别
OpenGL ES 概述 本文对 OpenGL ES 做了综合性的介绍,包括 OpenGL ES 的由来、主要版本及其特点、OpenGL ES 与 OpenGL 的主要区别等等。 简介2 OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。它的接口其实和 Open GL很类似。 OpenGL_ES有几
iOS开发与OpenGL ES相关问题整理(2)- 绘制图片上下颠倒
转载自:http://www.bennychen.cn/2011/05/ios开发与opengl-es相关问题整理(2)-绘制图片上下颠倒/ 使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系: UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 Ope...
openGL ES进阶教程(一)之粒子光束
2016AR/VR喊的火热,这些在Android上的实现或多或少与openGL 有关。 OpenGL能做的事情太多了!很多程序也看起来异常复杂。更有可能因为某一步的顺序错误导致最后渲染出错,这是因为,OpenGL和我们现在使用的C++、java这种面向对象的语言不同,OpenGL中的大多数函数使用了一种基于状态的方法。你可以看到Android中的播放器原理,就是API改变播放状态,逻辑性非常强~ 本
Quartz 2D编程指南(5) - 变换(Transforms)
Quartz 2D 绘制模型定义了两种独立的坐标空间:用户空间(用于表现文档页)和设备空间(用于表现设备的本地分辨率)。用户坐标空间用浮点数表示坐标,与设备空间的像素分辨率没有关系。当我们需要一个点或者显示文档时, Quartz会将用户空间坐标系统映射到设备空间坐标系统。因此,我们不需要重写应用程序或添加额外的代码来调整应用程序的输出以适应不同的设备。 我们可以通过操作CTM(current t
QT Opengl 图形旋转
用QT5 写的Opengl 图形旋转小实例, 直接运行起来后, 需要拖动窗口,让窗口不停地重绘,才会出现有动态的效果。
Cartographer纯定位实战:从仿真到真机部署的避坑指南
本文详细介绍了将Cartographer算法应用于机器人纯定位模式的完整实战流程。通过对比传统AMCL方案的不足,阐述了Cartographer基于子图匹配实现高精度、高鲁棒性定位的优势。内容涵盖从仿真环境测试到真机部署的核心步骤,包括关键配置文件修改、源码调整以及参数调优,旨在帮助开发者避开常见陷阱,成功实现稳定可靠的机器人定位系统。
openGL中的坐标系
openGL中的坐标系
飞书多维表格省钱攻略:1个专业版账号,全员合规用、权限全掌控
像运动馆、 托管班、作业辅导、少儿美术、书法、口才班等等。对于大多数中小团队而言,飞书多维表格的核心需求是“协作高效、数据可控、成本可控”,而“1个专业版账号+多联系人”的模式,恰好完美契合这三点——既不用为不必要的席位付费,又能解锁全部专业功能,还能通过精细化权限管控保障数据安全。尤其是餐饮店、乒乓球训练馆这类个体经营或小型团队,人员分工清晰、权限需求明确,采用这种模式能最大化节省成本,同时提升管理效率。无需复杂的配置,无需额外的技术支持,5分钟就能搭建起全员协作的省钱体系。
iOS--坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM、CGContextRotateCTM、CGContextConcatCTM等
在iOS中,Quartz 2D提供了坐标变换支持 CGContextTranslateCTM、CGContextScaleCTM、CGContextRotateCTM、CGContextConcatCTM进行坐标变换、CGAffineTransformMake获得变换矩阵
2022-8-3----Android10.0(MTK)-----SN_Writer 写入 SN 注意事项
SN_Writer、写入SN
Qt for Android:基于libusb实现CH340x串口通信的高效开发方案
本文详细介绍了在Qt for Android环境下,基于libusb实现CH340x串口通信的高效开发方案。通过绕过Android高版本系统的权限限制,利用libusb+JNI技术实现稳定通信,适用于工业手持终端等场景。文章涵盖环境搭建、核心实现、常见问题解决方案及性能调优经验,帮助开发者快速掌握这一关键技术。
CGContextTranslateCTM
- (void)viewDidLoad { [super viewDidLoad]; [self drawPhoto]; } -(void)drawPhoto { //自定义图层 CALayer *layer=[[CALayer alloc]init]; layer.bounds=CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HE
Pinocchio 安装教程|机器人学的必备库
安装pinocchio,不要安装pip3 install pinocchio!
OpenGL ES之三——绘制纯色背景
概述 从本文起开始进入编程阶段,本文目的主要是介绍如何使用OpenGL Es绘制纯色背景,通过这个过程让大家了解一下其使用流程。 流程大致如下(由于是全屏渲染成纯色,这里也不会涉及到顶点着色器和片段着色器。): 1.新建一个Android工程 2.配置OpenGL ES环境 3.GLSurfaceView作为展示View 4.实现自己的GLSurfaceView.Renderer完成具体的绘制工作...
大模型新闻摘要生成质量评估工具
大模型新闻摘要生成质量评估工具 关键词:大模型、新闻摘要、质量评估、自然语言处理、算法 摘要:本文将探讨大模型新闻摘要生成质量评估工具的设计与应用。首先介绍大模型新闻摘要生成的背景和问题,然后深入分析质量评估的难点和重要性,接着介绍大模型的
使用mid360运行lio-livox对比fast-lio2
msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。
iOS开发图像处理--绘制图片上下颠倒
使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系 : UIKit - y轴向下 Core Graphics(Quartz) - y轴向上 OpenGL ES - y轴向上 UIKit是iPhone SDK的Cocoa Touch层的核心framework,是iPhone应用程序图形界面和
Harmony:C# 动态代码补丁的5大秘密武器
Harmony 是一个开源库,它允许你在运行时修改托管代码(即使用 .NET 或 Mono 编译的语言编写的应用程序)。它通过利用 AOP(面向切面编程)的思想,可以在不重新编译代码的情况下添加、替换或修改方法的行为。这对于游戏模组(Modding)、插件开发以及调试工具非常有用。安装 Harmony要使用 Harmony,你需要首先安装它。Harmony 作为一个 NuGet 包,可以直接通过 Visual Studio 的 NuGet 包管理器进行安装。安装步骤打开 Visual Studio。
iOS开发与OpenGL ES 绘制图片上下颠倒
使用CGContextDrawImage绘制图片上下颠倒 首先要说的是,在iOS的不同framework中使用着不同的坐标系: UIKit - y轴向下Core Graphics(Quartz) - y轴向上OpenGL ES - y轴向上 UIKit是iPhone SDK的CocoaTouch层的核心framework,是iPhone应用程序图形界面和事件驱动的基础,它和传统的wi
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
android opengl es 文字,OpenGL ES2.0实现文字绘制Android
OpenGL ES2.0是无法直接绘制文字的,我采用的方法是将文字转为Bitmap,然后以图贴的方式进行渲染。看到网上也有人是将文字生成点,一个个进行绘制的,个人觉得这种方法还是挺麻烦的。文章分为两部分,一部分是在canvas中绘图转Bitmap,第二部分是贴图纹理绘制。文字转Bitmap这部分比较麻烦,网上介绍的canvas.drawText()的资料太多,看了都让人一头雾水,我也看了一天才明白...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
Android OpenGL ES基本用法(4),绘制纹理图片
vertex_shader.glsl //vec4使用4个向量xyzw attribute vec4 av_Position; //这里绘制2D图形,所以使用vec2两个向量的即可xy attribute vec2 af_Position; varying vec2 v_texPo; void main() { v_texPo = af_Position; gl_Position ...
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
OpenGL ES之十一——绘制3D图形
概述 经过前面的铺垫,我们对OpenGLES了解了不少了,是时候绘制一个立体图像了。 绘制一个圆锥: 2.1 圆锥 原理: 在之前的文章中我们绘制过圆形,圆锥可以看成是一个顶点坐标z不为0的圆形,绘制的方法和绘制一个圆是一样的。如下: 着色器文件 顶点着色器 #version 300 es layout (location = 0) in vec4 vPosition; layout (locat...
OpenGL纹理上下颠倒翻转的三种解决办法
综述 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL要求纹理坐标原点在图片最下面,如图: 而图片信息中的原点一般都在最上方,一行行记录下来的,就会导致整个图片上下颠倒了。 如图: 从这个思路触发共有三种办法解决问题: 一.翻转顶点信息中的纹理坐标 原始顶点如图: 因为纹理坐标的范围是0-1,所以翻转的话都统一用1去减 得到正确的图片: 二.翻转顶...
OpenGL ES 绘制一张图片
注意,上述接口程序中的第一行代码激活的是哪个纹理句柄,在第三行代码中的第二个参数就需要传递对应的 Index,就比如说代码中激活的纹理句柄是 GL_TEXTURE0,对应的第三行代码中的第二个参数 Index 就是 0,如果激活的纹理句柄是 GL_TEXTURE1,那对应的 Index 就是 1,句柄的个数在不同的平台不一样,但是一般都会在 32 个以上。而当缩小的时候,因为没有足够的片段来绘制所有的纹理单元,也会丢失很多细节,是真正的降采样。其中,mColorMatrix 是这个变量在接口程序中的句柄。
1万+



被折叠的 条评论
为什么被折叠?



