0

我正在通过网络连接接收一系列图像,并希望以最快的速度显示它们,最高 30 FPS。我派生了一个 UIView 对象(因此我可以覆盖 drawRect)并公开了一个名为cameraImage. 帧数据按需要尽快到达,但实际绘制到屏幕需要太多时间(由于 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
}
4

1 回答 1

3

尝试将CALayer's设置contents为图像。或者,如果您使用相对健全的参数进行设置,则设置 aUIImageView应该image不会慢很多。

OpenGL 绝对是一个替代方案,但它更难使用,而且它仍然会受到与其他相同的东西的限制:纹理上传速度。

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

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

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

于 2012-04-11T02:59:01.310 回答