iOS:在 drawRect 中绘制 RGBA 数据而不事先转换为 UIImage

标签 ios uiview rgb drawrect

我有一张图像存储在 RGBA 缓冲区中。现在我想在 UIView 的 drawRect 方法中绘制这些数据:

- (void)drawRect:(CGRect)rect
{
// draw RGBA here
}

一种方法是将数据复制到 UIImage(在 drawRect 方法之外)并绘制此 UIImage。有没有一种方法可以直接绘制数据而无需在 UIImage 中制作另一个副本?

问候,

最佳答案

为此目的使用 UIView 的 drawrect 函数会非常慢。任何时候你为 View 设置动画,移动它,在它上面移动其他东西或者任何它必须重绘的东西(缓慢的过程)。 UIImageView 针对此任务进行了优化,使用它会很有帮助。

但是如果您对 drawrect 死心塌地,那么您将不得不通过将 UIView 的宽度和高度除以图像的宽度和高度(以像素为单位)来创建“像素”矩形。然后遍历每个像素行和列并使用 CGContextSetFillColorCGContextFillRect。将颜色数组排序为相似的颜色并同时绘制相同的颜色可能对性能有意义。但是还是比 UIImageView 慢很多。拥有数组和 UIImageView 的内存重叠还不足以抵消其好处。

关于iOS:在 drawRect 中绘制 RGBA 数据而不事先转换为 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21660179/

相关文章:

ios - swift 2.1 无法将 anyobject 类型的值转换为预期的参数类型 nslayoutconstraint

ios - 使用键盘 ios 向上/向下移动 View

ios - 在 Scrollview 的滚动条上移动 CALayer 的 mask

ios - 将添加了 subview 的 UIView 制作成单个图像?

ios - Core Data 只节省了大约 50% 的时间

ios - 向 uiview 添加从 A 点移动到 B 点的动画

go - 将 RGBA 图像转换为灰度 Golang

python - 区分 8 种颜色中的一种最准确的方法是什么?

jquery - 我可以强制 jQuery.css ("backgroundColor") 返回十六进制格式吗?

ios - 使用 managedObjectContext 属性保存自定义核心数据对象是否正确