关于iphone:用触摸编辑CGImage(或UIImage)的alpha然后显示的最有效方法? | 珊瑚贝

Fatsest way to edit alpha of CGImage (or UIImage) with touch and then display?


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

目前我正在这样做……

  • 对于每一次触摸。
  • 从顶部图像的 CGImage 获取图像缓冲区的副本。
  • 编辑缓冲区的 Alpha 通道以创建一个以触摸点为中心的透明圆圈。
  • 从缓冲区创建新的 CGImage。
  • 从 CGImage 创建 UIImage 并将新的 UIImage 用作顶部图像视图的图像。
  • 这可行,但您可以看到太多副本,涉及创建并且速度很慢。

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


    1
    CGImageCreateWithMask

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

    CGImage 和 CGBitmapContext 必须是灰度的。您可以使用 CGImageMaskCreate 或 CGImageCreate 来制作图像,但首选前者。

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

    的视图上添加一个 setNeedsDisplay

    • 我有一个基于drawonward回答的想法:您可以将原始图像保留为CALayer(A)的内容。将 (A) 的”掩码”属性设置为掩码图像。当用户触摸屏幕时,适当修改遮罩图像。我认为这可能涉及更少的内存副本。
    • drawonward:您的建议不会要求在每次更新时绘制一个 CGImage 吗?我想知道使用 CALayer 掩码是否会更有效?


    来源:https://www.codenong.com/2796849/

    微信公众号
    手机浏览(小程序)

    Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9060.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
    0
    分享到:
    没有账号? 忘记密码?