我有两个 ImageView ,一个在另一个之上,有两个不同的图像。当用户触摸图像并移动他/她的手指时,顶部图像应该沿着具有固定半径的触摸点变得透明。 (如 PhotoChop 应用程序)。
目前我正在这样做......
- 每次触摸。
- 从顶部图像的 CGImage 获取图像缓冲区的副本。
- 编辑缓冲区的 Alpha channel 以创建以触摸点为中心的透明圆圈。
- 从缓冲区创建新的 CGImage。
- 从 CGImage 创建 UIImage 并使用新的 UIImage 作为顶部 ImageView 的图像。
这可行,但正如您所看到的,涉及太多复制、创建,而且速度很慢。
有人可以建议我一种更快的方法来做同样的事情吗?
最佳答案
CGImageCreateWithMask
当用户绘制时,根据更改修改CGBitmapContext
。保留引用上下文的链接CGImage
。从原始图像和蒙版创建一个蒙版图像,并从中创建一个 UIImage
。
CGImage
以及 CGBitmapContext
必须是灰度的。您可以使用 CGImageMaskCreate
或 CGImageCreate
来制作图像,但首选前者。
我不确定其内部结构,但可能每次绘制 UIImage
时,它都会一直引用回 CGBitmapContext
。换句话说,我认为不会复制任何内容,您所需要的只是包含 UIImage 的 View 上的 setNeedsDisplay
。
关于iphone - 通过触摸编辑 CGImage(或 UIImage)的 alpha 然后显示的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796849/