在 UIView 中逐像素绘制像素

Draw pixel per pixel in UIView

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

这是我试过的:

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

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

尝试将 UIImageView 添加为您的视图的子视图,并使用 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 子视图的解决方案。

只需更改代码行:

self.imageView.image = image;

与:

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