尽可能快地显示CGImage数据流

时间:2012-04-11 02:47:36

标签: iphone ios ipad opengl-es uiimage

我通过网络连接收到一系列图像,并希望尽快显示它们,最高可达30 FPS。我已经派生了一个UIView对象(所以我可以覆盖drawRect)并暴露了一个名为cameraImage的UIImage属性。帧数据以所需的速度到达,但实际绘制到屏幕需要花费太多时间(由于setNeedsDisplay的延迟),都会在视频中产生延迟并减慢与其他控件的交互。有什么更好的方法呢?我虽然使用OpenGL,但我见过的唯一例子不是将静态图像绘制到屏幕上,而是用于为某些旋转多边形添加纹理。

- (void)drawRect:(CGRect)rect
{
  CGContextRef context = UIGraphicsGetCurrentContext();

  CGRect screenBounds = [[UIScreen mainScreen] bounds];
  [self.cameraImage drawInRect:screenBounds];

  // Drawing code
  //CGContextDrawImage(context, screenBounds, [self.cameraImage CGImage]); // Doesn't help
}

1 个答案:

答案 0 :(得分:3)

尝试为图片设置CALayer的{​​{1}}。或者,如果您使用相对合理的参数进行设置,设置contents的{​​{1}}的速度应该不会慢得多。

OpenGL绝对是一种替代方案,但它的使用起来要困难得多,它仍然会受到与其他产品相同的限制:纹理上传速度。

(你正在做的方式(在UIImageView中绘图),你必须让UIKit为你分配一个位图,然后将图像绘制到位图中,然后将位图上传到视频硬件。如果可以,跳过中间人并直接上传图片。)

它也可能取决于CGImage的来源。它是由原始位图数据支持(如果是这样,以什么格式?),还是JPEG或PNG?如果图像必须进行格式转换或解码,则需要更长时间。

另外,CGImage有多大?确保它不比它需要的大!