在 UIView 中逐像素绘制像素
Draw pixel per pixel in UIView
我正在尝试创建一个简单的软件渲染引擎。因此,我正在寻找最有效的方法来逐像素绘制 UIView
。
这是我试过的:
- 使用
drawRect:
绘图
- 使用
CGBitmapContextCreate
创建 CGContext
并手动绘制
这两个都给了我糟糕的帧率,大约 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;
我正在尝试创建一个简单的软件渲染引擎。因此,我正在寻找最有效的方法来逐像素绘制 UIView
。
这是我试过的:
- 使用
drawRect:
绘图
- 使用
CGBitmapContextCreate
创建CGContext
并手动绘制
这两个都给了我糟糕的帧率,大约 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;