所谓“屏幕双缓冲”是指在内存中建立一个“图形设备上下文的缓存”,所有的绘图操作都在
这个“图形上下文缓存”上进行,在需要显示这个“图形上下文”的时候,再次把它更新到屏幕设备上。
iPhone平台提供了这样一个API:
CGContextRef CGBitmapContextCreate (
void *data,
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo
);
这个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值指定了每个像素的不透明度。
根据上面讲述的知识点,笔者定义了被渲染内存区域如下:
imageData = malloc((iFrame.size.width)*(iFrame.size.height)*32);
笔者这里在屏幕每个像素上使用了32-bits来表示RGBA颜色格式,那么参数bitsPerComponent就为32/4=8,各个参数
的定义如下:
iDevice = CGBitmapContextCreate(imageData,iFrame.size.width,iFrame.size.height,8,32*(iFrame.size.width),
iColorSpace,kCGImageAlphaPremultipliedLast);
这里笔者获取iColorSpace的方法如下:
iColorSpace = CGColorSpaceCreateDeviceRGB();
CGColorSpaceCreateDeviceRGB()方法可以获取设备无关的RGB颜色空间,这个颜色空间需要调用
CGColorSpaceRelease()进行释放。
在创建成功被渲染的内存区域的“视图上下文”iDevice后,那么读者就可以在这个被渲染的内存区域的
“位图上下文”上进行绘制操作了,正如上面所讲的,所有的绘制操作将在被渲染的内存区域中被渲染成位图数据,
绘制操作如下:
-(void)drawbuffer{
void *imageData=malloc(320*480*32);
CGColorSpaceRef iColorSpace=CGColorSpaceCreateDeviceRGB();
iDevice = CGBitmapContextCreate(imageData,320,480,8,4*320,
iColorSpace,kCGImageAlphaPremultipliedLast);
CGRect rt1=CGRectMake(0,0,320,480);
// 绘制图片
UIImage *image=[UIImage imageNamed:@"iphone.png"];
CGContextDrawImage(iDevice,rt1, image);
// 绘制半矩形
//保存状态
CGContextSaveGState(iDevice);
//设置颜色值
CGContextSetRGBFillColor(iDevice, 1.0, 1.0, 1.0, 1);
CGContextFillRect(iDevice, rt);
//释放状态
CGContextRestoreGState(iDevice);
CGContextStrokePath(iDevice);
// 绘制直线
CGContextSetRGBStrokeColor(iDevice, 1.0, 0.0, 0.0, 1.0);
CGPoint pt0, pt1;
CGPoint points[2];
pt0.x = 10;
pt0.y = 250;
pt1.x = 310;
pt1.y = 250;
points[0] = pt0;
points[1] = pt1;
CGContextAddLines(iDevice, points, 2);
CGContextStrokePath(iDevice);
CGImageRef iOffScreen=CGBitmapContextCreateImage(iDevice);
UIImage* iImage = [UIImage WithCGImage:iOffScreen];
[iImage drawInRect:CGRectMake(0, 0, 120, 160)];
}
可见,在被渲染的内存区域的“位图上下文”中可以进行图片、矩形、直线等各种绘制操作,这些操作被渲染成位
图数据,读者可以通过如下方法获取到这个被渲染的“位图”:
-(void)drawRect:(CGRect)rect {
[self drawbuffer];
}
上面的代码中,通过iOffScreenBitmap的DrawImage:CGImageRef方法把图片merry.png绘制到屏幕双缓冲中,
并接着进行了矩形、直线绘制,然后通过CGBitmapContextCreateImage:CGConotextRef方法获取“视图上下文”的
“视图快照(snapshot)”image_1,最后把这个“视图快照”更新到屏幕上,从而实现屏幕双缓冲的技术
分享到:
相关推荐
屏幕双缓冲技术是一种在图形用户界面...总结来说,虽然iPhone平台上关于屏幕双缓冲技术的资料较少,但通过官方提供的Core Graphics框架,开发者依然可以利用屏幕双缓冲技术来优化应用程序的绘图性能和提升用户体验。
总结来说,屏幕双缓冲技术在iPhone应用开发中能够提供平滑的动画效果,避免了直接在屏幕上绘制时可能出现的闪烁和不连续。通过Core Graphics框架提供的API,开发者可以轻松地创建和管理后台缓冲区,从而实现高效且...
在iOS开发中,图像处理是不可或缺的一部分,尤其是在iPhone应用中,因为用户经常需要与图片进行交互,例如拍照、编辑和分享。以下是对iPhone图像处理的一些关键知识点的详细说明: 1. **图片尺寸调整**: 当你需要...
“屏幕双缓冲”是GUI客户端中经常使用的一种技术,这种技术在symbian中经常用到,但是在iPhone平台却少有人提及,而且在网上很难找到资料,恰好我近开发的项目中又要用到这个,经过自己的整理编辑以及思考,于是写出...
在iOS开发中,图像处理是不可或缺的一部分,尤其是在iPhone应用开发中。本文主要总结了几个关键的图像处理技术,包括图像的缩放、存储、从照片库保存和读取,以及在图片背景上添加文字。 首先,图像的缩放是常见的...
在iOS开发中,图像处理是不...以上是iPhone图像处理的一些基础操作,包括图片缩放、存储、加载、保存到相册以及在图片上绘制文字等。在实际开发中,开发者可能还需要考虑更多细节,如性能优化、内存管理、错误处理等。
标题中的“VC实现的类似IPHONE的软键盘”是指使用...它涵盖了双缓冲技术、图像处理、用户交互和扩展性设计等多个方面的知识点。对于学习C++编程、图形界面设计以及移动应用开发的人员来说,这是一个有价值的实践案例。
这个名为“iPhone图片转换工具”的程序正是为了解决这样的问题而设计的。iPhone设备上的图片通常采用的是非标准格式,比如HEIC(High Efficiency Image File Format),这是一种由Apple推出的新一代图像文件格式,...
在Java开发中,处理图像尤其是来自移动设备如iPhone的照片时,常常会遇到一些特定的问题,例如照片上传时的旋转问题。这是因为iOS设备在拍摄照片时可能会记录照片的元数据(Exif信息),其中包括照片的旋转角度,这...
"iPhone之手势切换图片示例程序"是一个教程,旨在教你如何利用手势识别技术在iPhone应用中实现图片的平滑切换。这个示例程序可能包含了多个步骤,包括设置手势识别器、响应手势事件以及动态更新图片视图。 首先,...
总的来说,这个主题涉及到的技术点包括iOS系统的文件结构、权限管理、用户界面定制、越狱技术以及图像资源处理。对于普通用户,这样的操作通常需要一定的技术背景,而对于开发者或爱好者,这是一个探索和展示创意的...
例如,iPhone 12 Pro Max首次采用了传感器位移式光学图像防抖技术,极大地提高了拍照稳定性。 #### 3. 生物识别技术 除了传统的密码解锁方式外,iPhone还支持Touch ID指纹识别和Face ID面部识别两种生物识别技术。...
Iphone开发系列源码——Image图片缩放随着手指Iphone开发系列源码——Image图片缩放随着手指Iphone开发系列源码——Image图片缩放随着手指Iphone开发系列源码——Image图片缩放随着手指Iphone开发系列源码——Image...
仿iPhone/iPod动态图片浏览器 仿iPhone/iPod动态图片浏览器 仿iPhone/iPod动态图片浏览器
如果你收到的PDF是以图片形式发送的,这可能意味着发送者已经预先将其转换为图像。这种情况下,你可以使用以下方法来查看这些图片形式的PDF: 1. **使用“照片”应用**:如果PDF文件已经被转换为图片并发送到你的...
**iPhone常见故障处理** 在使用苹果iPhone的过程中,可能会遇到各种故障。以下是一些常见的问题及其解决方案: 1. **iPhone无响应或卡死** - 当iPhone卡住时,可以尝试按下Home键持续6-8秒,这通常可以退出导致...
标题中的“放IPHONE的图片切换效果”指的是在软件或网页设计中,模仿苹果iPhone设备上的图片滑动切换效果。这种效果通常出现在相册应用、幻灯片展示或者UI设计中,用户可以通过左右滑动来浏览不同的图片。实现这一...
1. 拆解步骤:维修iPhone 4时,需按照特定顺序拆卸螺丝,分离前后玻璃面板,小心处理内部的连接器和传感器,避免损坏。 2. 主要部件:内部主要部件包括A4处理器、电池、摄像头、显示屏、天线等。这些部件的更换需...
当我们需要将iPhone上的PNG图片拷贝到电脑并进行处理时,可能会遇到一些兼容性问题,特别是对于Windows系统来说,有时可能无法直接识别某些特定的PNG文件。本文将详细讲解如何解析iPhone拷贝到电脑的PNG图片,并将其...