【连载】IOS开发-图形渲染(二)

上一篇讲到了计算机图形的渲染机制,那么对于iOS设备来说具体是怎么渲染?

IOS图形渲染流程

1.App通过调用CoreAnimation、

CoreGraphics等图形渲染框架提供的接口来触发图形渲染操作,

2.图形渲染框架将渲染数据交由OpenGL ES/Metal底层库,然后由OpenGL ES/Metal驱动GPU做渲染,最后显示到屏幕上。具体如下图:

iOS图形渲染框架

1.UIKit

UIKit 是 我们最常用的框架,这个没有什么好说的。

2.Core Animation

Core Animation  是我们做动画常用的框架,源自于 Layer Kit,其中里面有个很重要概念(CALayer),这个等下再讲。

3.Core Graphics

Core Graphics 基于 Quartz 高级绘图引擎,主要用于运行时绘制图像。例如基于路径的绘图,转换,渐变和阴影,图像数据管理,图像创建和图像遮罩等。

4.Core Image

Core Image  用得不多,主要是用来处理 运行前创建的图像 的。Core Image 框架拥有一系列现成的图像过滤器,能对已存在的图像进行高效的处理。

5.OpenGL ES

OpenGL ES是OpenGL 的子集,而OpenGL是第三方针对视频,图像/图形处理的库。OpenGL是直接操作GPU的,它的代码一般由各GPU厂商负责开发维护.

6.Metal

Metal是苹果公司在OpenGL ES基础上进行二次封装的视频、图形/图像库。

CALayer

在CoreAnimation框架中有一个很重要的概念:CALayer。

它的作用是把我们界面上看到的东西,都转化成独立CALayer,然后统一处理并发送到OpenGL ES/Metal底层库。

我们创建的每一个UIView都有一个CALayer,它是UIView的基础。

UIView和CALayer有一些区别的:

1. UIView侧重内容的管理,CALayer侧重内容的绘制。

2.UIView继承NSResponse,能响应事件,而CALayer不能响应事件.

3.UIView显示的内容都依赖于CALayer,CALayer的显示需要UIView这个容器。

CALayer为什么又能实现显示呢?

答案就是:CALayer基本等同于纹理,这个纹理就是GPU的基本概念了。其实质就是一块contents的缓冲区,可以存放位图(Bitmap)信息。通过CALayer,打通了上层界面和GPU之间的联系。

参考资料:

iOS 图像渲染原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
iOS开发中上传图片可以采用以下步骤: 1.选择要上传的图片,可以使用系统提供的UIImagePickerController控制器,或者使用第三方库,例如TZImagePickerController。 2.将选中的图片转换为NSData格式。 3.使用NSURLSession或AFNetworking等网络库,将图片数据上传到服务器。 以下是一个简单的上传图片的示例代码: ``` // 选择图片 UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.delegate = self; [self presentViewController:imagePicker animated:YES completion:nil]; // 将选中的图片转换为NSData格式 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info { UIImage *selectedImage = info[UIImagePickerControllerOriginalImage]; NSData *imageData = UIImageJPEGRepresentation(selectedImage, 0.5); // 上传图片到服务器 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration]; NSURL *url = [NSURL URLWithString:@"http://example.com/upload.php"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 处理服务器返回的响应 }]; [uploadTask resume]; [picker dismissViewControllerAnimated:YES completion:nil]; } ``` 其中,upload.php是服务器端接收图片的脚本文件。在服务器端,可以使用PHP等语言来处理上传的图片数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值