【问题标题】:Fatsest way to edit alpha of CGImage (or UIImage) with touch and then display?用触摸编辑 CGImage(或 UIImage)的 alpha 然后显示的最快方法?
【发布时间】:2010-05-09 06:40:39
【问题描述】:

我有两个图像视图,一个在另一个之上,有两个不同的图像。当用户触摸图像并移动他/她的手指时,顶部图像应该沿着具有固定半径的触摸点变得透明。 (如 PhotoChop 应用)。

目前我正在这样做......

  1. 每次触摸。
  2. 从顶部图像的 CGImage 中获取图像缓冲区的副本。
  3. 编辑缓冲区的 Alpha 通道以创建一个以触摸点为中心的透明圆圈。
  4. 从缓冲区创建新的 CGImage。
  5. 从 CGImage 创建 UIImage 并将新的 UIImage 用作顶部图像视图的图像。

这可行,但您可以看到太多副本,涉及创建并且速度很慢。

有人可以建议我一种更快的方法来做同样的事情吗?

【问题讨论】:

    标签: iphone xcode uiimage alpha cgimage


    【解决方案1】:
    CGImageCreateWithMask
    

    当用户绘制时,修改 CGBitmapContext 并进行更改。保留指向上下文的链接CGImage。从原始图像和蒙版创建蒙版图像,并从中创建一个UIImage

    CGImageCGBitmapContext 必须是灰度的。您可以使用CGImageMaskCreateCGImageCreate 制作图像,但首选前者。

    我不确定内部结构,但可能每次绘制UIImage 时,它都会一直引用CGBitmapContext。换句话说,我认为不会复制任何内容,您只需要在包含 UIImage 的视图上添加 setNeedsDisplay

    【讨论】:

    • 我有一个基于drawonward回答的想法:您可以将原始图像保留为CALayer (A) 的内容。将 (A) 的“掩码”属性设置为掩码图像。当用户触摸屏幕时,适当修改遮罩图像。我认为这可能涉及更少的内存副本。
    • drawnonward:您的建议不会要求在每次更新时绘制一个 CGImage 吗?我想知道使用 CALayer + 蒙版是否会更有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多