ios - 在 UIView 中逐像素绘制像素

标签 ios objective-c swift uiview

我正在尝试创建一个简单的软件渲染引擎。因此,我正在寻找逐像素绘制 UIView 的最高效方法。

这是我试过的:

  • 使用drawRect:绘制
  • 使用 CGBitmapContextCreate 创建一个 CGContext 并手动绘制它

这两个都给了我糟糕的帧率,大约 15 fps。

有人知道以更高效的方式逐像素绘制的方法吗?

最佳答案

尝试将 UIImageView 添加为 View 的 subview ,并使用 drawRect 之外的渲染图像设置它的图像属性:

- (void)renderImageInRect:(CGRect)rect {
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       UIGraphicsBeginImageContext(rect);
       //draw...
       UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
       dispatch_async(dispatch_get_main_queue(), ^{
              self.imageView.image = image;
       });
       UIGraphicsEndImageContext();
   }
}

另一种解决方案是像 GPUImage 中那样使用 OpenGL ES

编辑: 另一种基于 CALayer 的解决方案,没有 UIImageView subview 。

只需更改代码行:

self.imageView.image = image;

与:

self.layer.contents = (id) image.CGImage;

关于ios - 在 UIView 中逐像素绘制像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566731/

相关文章:

ios - 带有部分名称的 NSFetchedResultsController

ios - iOS-从文本字段获取参数时,修剪前是否应检查null?

objective-c - 我如何将文本字段单元格(在 cocoa 中)中的文本复制到 NSPasteboard?

ios - Swift 中的 JSON 写入 (NSConcreteMutableData) 类型无效

ios - 为什么 Storyboard是空白的并且 View 是灰色的?

ios - Shopify 网站仅在 Ipad 的右侧提供空白

iphone - NSDictionary 循环

objective-c - 以编程方式启动 OSX 中的默认程序

ios - 您可以使用 iOS 应用程序发送弹出通知吗?

swift - UIStackView 不显示