Fatsest way to edit alpha of CGImage (or UIImage) with touch and then display?
我有两个图像视图,一个在另一个之上,有两个不同的图像。当用户触摸图像并移动他/她的手指时,顶部图像应该沿着具有固定半径的触摸点变得透明。 (如 PhotoChop 应用程序)。
目前我正在这样做......
对于每一次触摸。
从顶部图像的 CGImage 获取图像缓冲区的副本。
编辑缓冲区的 Alpha 通道以创建一个以触摸点为中心的透明圆圈。
从缓冲区创建新的 CGImage。
从 CGImage 创建 UIImage 并将新的 UIImage 用作顶部图像视图的图像。
这可行,但您可以看到太多副本,涉及创建并且速度很慢。
有人可以建议我做同样事情的更快方法吗?
当用户绘制时,用更改修改 CGBitmapContext。保持一个链接的 CGImage 引用上下文。从原始图像和蒙版创建蒙版图像,并从中创建 UIImage。
CGImage 和 CGBitmapContext 必须是灰度的。您可以使用 CGImageMaskCreate 或 CGImageCreate 来制作图像,但首选前者。
我不确定内部结构,但可能每次绘制 UIImage 时,它都会一直引用到 CGBitmapContext。换句话说,我认为不会复制任何内容,您只需要在包含 UIImage.
的视图上添加一个 setNeedsDisplay
- 我有一个基于drawonward回答的想法:您可以将原始图像保留为CALayer(A)的内容。将 (A) 的"掩码"属性设置为掩码图像。当用户触摸屏幕时,适当修改遮罩图像。我认为这可能涉及更少的内存副本。
-
drawonward:您的建议不会要求在每次更新时绘制一个 CGImage 吗?我想知道使用 CALayer 掩码是否会更有效?