解析iPhone屏幕双缓冲技术

移动开发 iOS
本文介绍对是iPhone屏幕双缓冲技术,主要是来了解“屏幕 双缓冲”技术,我们先来看内容。

iPhone屏幕缓冲技术是本文要介绍的内容,相信大多数人都知道,所谓“屏幕缓冲”是指在内存中建立一个“图形设备上下文的缓存”,所有的绘图操作都在这个“图形上下文缓存”上进行,在需要显示这个“图形上下文”的时候,再次把 它更新到屏幕设备上。

iPhone平台提 供了这样一个API:

  1. CGContextRef CGBitmapContextCreate (  
  2.    void *data,  
  3.    size_t width,  
  4.    size_t height,  
  5.    size_t bitsPerComponent,  
  6.    size_t bytesPerRow,  
  7.    CGColorSpaceRef colorspace,  
  8.    CGBitmapInfo bitmapInfo  
  9. );  

这个API各个参数的意义如下:

参数data指向绘图操作被渲染的内存区域,这个内存区域大小应该为(bytesPerRow*height)个字节。如果对绘制操作被渲染的内存区域并无特别的要求,那么可以传递NULL给参数date。

参数width代表被渲染内存区域的宽度。

参数height代表被渲染内存区域的高度。

参数bitsPerComponent被渲染内存区域中组件在屏幕每个像素点上需要使用的bits位,举例来说,如果使用32-bit像素和RGB颜色格式,那么RGBA颜色格式中每个组件在屏幕每个像素点上需要使用的bits位就为32/4=8。

参数bytesPerRow代表被渲染内存区域中每行所使用的bytes位数。

参数colorspace用于被渲染内存区域的“位图上下文”。

参数bitmapInfo指定被渲染内存区域的“视图”是否包含一个alpha(透视)通道以及每个像素相应的位置,除此之外还可以指定组件式是浮点值还是整数值。

从接口定义中可以看出,当调用这 个函数时,系统会创建一个“视图绘制环境”,这个“视图绘制环境”就是读者定义的一个“视图上下文”。当读者在这个“视图上下文”进行绘制操作时,系统会 在定义的渲染内存区域中把绘制操作渲染成位图数据。“视图上下文”的像素格式由三个参数来定义,也就是每个组件占用的bits位数、colorspace以及alpha(透视),而alpha值指定了每个像素的不透明度。

根据上面讲述的知识点,笔者定义 了被渲染内存区域如下:

  1. imageData = malloc((iFrame.size.width)*(iFrame.size.height)*32); 

笔者这里在屏幕每个像素上使用了32-bits来表示RGBA颜色格式,那么参数bitsPerComponent就为32/4=8,各个参数的定义如下:

  1. iDevice = CGBitmapContextCreate(imageData,iFrame.size.width,iFrame.size.height,8,32*(iFrame.size.width),
  2. iColorSpace,kCGImageAlphaPremultipliedLast); 

这里笔者获取iColorSpace的方法如下:

  1. iColorSpace = CGColorSpaceCreateDeviceRGB(); 

CGColorSpaceCreateDeviceRGB()方法可以获取设备无关的RGB颜色空间,这个颜色空间需要调用CGColorSpaceRelease()进行释放。

在创建成功被渲染的内存区域的 “视图上下文”iDevice

小结:iPhone屏幕缓冲技术的内容介绍完了,看完本文,是不是有所收获,***希望本文对你有所帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-04 17:47:03

iPhone 双缓冲 视图

2023-10-09 23:01:09

MySQL数据库

2015-02-05 14:31:45

iPhone适配

2012-03-05 20:27:58

iPhone

2015-09-25 09:14:50

java缓冲技术

2013-12-04 10:31:22

iPhone 6大屏幕iPhonePrimeSense

2011-06-02 17:27:49

iphone 多线程

2017-07-04 17:09:10

Map环形缓冲区数据

2011-07-07 11:12:57

iPad iPhone

2020-06-09 15:24:12

苹果屏幕发绿iPhone

2023-06-16 10:17:53

ARVR苹果

2018-09-12 16:44:45

iPhone苹果双卡双待

2011-07-29 15:09:48

iPhone Category

2018-09-21 10:48:37

苹果iPhone手机

2011-08-02 18:07:03

iPhone 内省 Cocoa

2023-11-02 09:42:21

iOS屏幕旋转

2011-08-12 11:23:47

iPhone窗口视图

2011-08-12 14:39:00

iPhoneSDK

2021-10-28 07:56:52

多线程日志系统嵌入式开发

2009-08-14 09:03:44

iPhone爆炸
点赞
收藏

51CTO技术栈公众号