首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone -绘制大量静态线条(Quartz2D vs OpenGL ES性能)

iPhone -绘制大量静态线条(Quartz2D vs OpenGL ES性能)
EN

Stack Overflow用户
提问于 2011-04-08 20:12:59
回答 1查看 1.2K关注 0票数 2

假设您必须在一个大小可能为3,000×3,000的UIView上画出100,000条线。顺便说一句,它位于UIScrollView的内部。我用Quartz-2D这样做,编写了一个普通的drawRect,它花费的时间太长了(在最新的硬件上花几分钟)。我做了一些研究,似乎有两种更快的方法:

1)使用Quartz-2D,但要绘制到屏幕外的缓冲区,然后加载到UIView上。

2)使用OpenGL ES,绘制线条,打印到UIImage,然后加载到UIView上

你对原始方法和这两种方法的性能有什么区别吗?您有什么示例代码可以用来完成(1)或(2)吗?这似乎是一个简单的任务,但我有点迷路了。

对于选项(1),以下是我在网上所能找到的尝试:

代码语言:javascript
复制
- (CGContextRef) createOffscreenContext: (CGSize) size  {
  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, 
  size.width*4, colorSpace, kCGImageAlphaPremultipliedLast);
  CGColorSpaceRelease(colorSpace);
  CGContextTranslateCTM(context, 0, size.height);
  CGContextScaleCTM(context, 1.0, -1.0);
  return context;
}


- (void)drawRect:(CGRect) rect {
  self.backgroundColor = [UIColor clearColor];
  CGSize size = self.frame.size;
  drawingContext = [self createOffscreenContext: size];
  UIGraphicsPushContext(drawingContext);
  //draw stuff here
  CGImageRef cgImage = CGBitmapContextCreateImage(drawingContext); 
  UIImage *uiImage = [[UIImage alloc] initWithCGImage:cgImage];
  UIGraphicsPopContext();
  CGImageRelease(cgImage);
  [uiImage drawInRect: rect];
  [uiImage release];
}

有什么想法?如有任何帮助和/或建议,我们将不胜感激。

更新:我实现了第一个解决方案,它实际上快了很多。然而,它使程序非常不稳定,有时调用setNeedsDisplay会使其崩溃。接下来将尝试开发一个OpenGL解决方案。

EN

回答 1

Stack Overflow用户

发布于 2011-04-08 22:32:22

这篇博客文章我的Matt也许会让你感兴趣。他说的是QuartzGL和“常规”绘图(所以不是你想要的),但我认为您可能处于某种类似的情况下。基本上,它归结为“这不重要”/“你不能说”。

最后,我想您应该尝试实现这两个选项,看看哪个更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5600302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档