【问题标题】:How to implement alpha gradient on a image?如何在图像上实现 alpha 渐变?
【发布时间】:2011-08-20 00:08:56
【问题描述】:

我想在图像上实现 alpha 渐变。从图像顶部的 0.5 alfa 到底部的 0.0。 欢迎任何建议、教程、链接。

【问题讨论】:

  • 你想修改原始图像还是只关心它以渐变显示?
  • 我只想在图片下显示一个渐变。
  • Anomie 在他的回答中涵盖了这个案例
  • 如果我既想显示图像,又想保存修改后的副本?

标签: iphone ios gradient alpha quartz-2d


【解决方案1】:

您可以使用CGImageCreateWithMask 对其应用掩码图像。您可以通过使用CGContextDrawLinearGradient 绘制到灰度或仅 alpha 的 CGBitmapContext 来生成适当的蒙版。

如果它显示为 CALayer 的内容,您可以将适当的遮罩层应用到父层的 mask 属性。您可以使用具有适当颜色的 CAGradientLayer 来创建此蒙版。

您可以将图像绘制到 CGBitmapContext,然后使用 kCGBlendModeDestinationIn 在其上绘制适当的 alpha 渐变。或者先绘制渐变,然后使用kCGBlendModeSourceIn 在上面绘制图像。在这两种情况下,CGContextDrawLinearGradient 又是你的朋友。然后,当然,在底层数据缓冲区上使用CGBitmapContextCreateImageCGImageCreate 将图像从CGContext 中取出。

或者,当然,如果您控制原始图像并且永远不需要没有 alpha 渐变的版本,您可以首先将其存储为具有适当 alpha 值的 PNG。

【讨论】:

    【解决方案2】:

    你可以试试CAGradientLayer

    UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
     CAGradientLayer *gradient = [CAGradientLayer layer];
     gradient.frame = view.bounds;
     gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
     [view.layer insertSublayer:gradient atIndex:0];
    

    另一种选择

    试试前面SO question@Caleb建议的答案

    你可以去Graphics Contexts。 所有绘图都发生在图形中 语境。如果你想创建一个 具有径向渐变的图像,或 线性渐变,或其他任何东西, 你需要:

    • 使用
      UIGraphicsBeginImageContextWithOptions为您的图像创建图形上下文。
    • 随心所欲地画在图像中。
    • 致电UIGraphicsGetImageFromCurrentImageContext 从上下文中获取图像。
      这会给你一个UIImage,所以不需要 从CGImage 转换。
    • 致电UIGraphicsEndImageContext 清理上下文。

    你也可以看看Radial gradient on UImage

    【讨论】:

      【解决方案3】:

      通过逐行读取现有图像中的像素(获取它们的 RGBA)来创建新图像,将它们添加到具有相同 RGB 值但逐行调整 alpha 值的新图像中。

      其他一些 SO 问题应该可以为您提供所需的一切:

      How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?

      Can I edit the pixels of the UIImage's property CGImage

      【讨论】:

      • 虽然这会起作用,但它可能会比使用 Core Graphics 慢得多。不要忘记,如果您使用预乘 alpha,您还必须调整 RGB 值。
      【解决方案4】:

      我发现了一些东西here, 效果很好!

      AlphaGradientView* gradient = [[AlphaGradientView alloc] initWithFrame:
                                 CGRectMake(self.view.frame.size.width - 150, 0, 150, 
                                                      self.view.frame.size.height)];
      
      gradient.color = [UIColor yellowColor];
      gradient.direction = GRADIENT_RIGHT;
      [self.view addSubview:gradient]; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        相关资源
        最近更新 更多