¿Cómo implementar degradado alfa en una image?

Quiero implementar gradiente alfa en una image. De 0.5 alfa en la parte superior de la image a 0.0 en la parte inferior. Cualquier consejo, tutorial, enlace es bienvenido.

Puede usar CGImageCreateWithMask para aplicar una image de enmascaramiento. Podría generar una máscara adecuada simplemente dibujando en un CGBitmapContext de escala de grises o solo alfa con CGContextDrawLinearGradient .

Si se muestra como el contenido de un CALayer, puede aplicar una capa de enmascaramiento adecuada a la propiedad de mask la capa primaria. Puede usar un CAGradientLayer con los colors apropiados para crear esta máscara.

Puede dibujar la image en un CGBitmapContext, y luego dibujar un degradado alfa apropiado sobre él usando kCGBlendModeDestinationIn . O dibuje el degradado primero y dibuje la image sobre él usando kCGBlendModeSourceIn . En ambos casos, CGContextDrawLinearGradient es nuevamente tu amigo. Entonces, por supuesto, saque la image del CGContext usando CGBitmapContextCreateImage o CGImageCreate en el búfer de datos subyacente.

O, por supuesto, si controla la image original y nunca necesita una versión sin el gradiente alfa, simplemente podría almacenarla como un PNG con los valores alfa apropiados en primer lugar.

Puedes probar 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]; 

Otra opción

Prueba la respuesta sugerida por @Caleb en esta pregunta anterior de SO

Puedes ir a Graphics Contexts . Todo el dibujo sucede en un context de charts. Si desea crear una image que tenga un degradado radial o un degradado lineal, o cualquier otra cosa, necesitará:

  • Cree un context de charts para su image con
    UIGraphicsBeginImageContextWithOptions .
  • Haz lo que quieras que aparezca en la image.
  • Llame a UIGraphicsGetImageFromCurrentImageContext para get la image del context.
    Esto le proporciona un UIImage , por lo que no es necesario convertirlo de una image CGImage .
  • Llame a UIGraphicsEndImageContext para limpiar el context.

También puedes echar un vistazo a Gradiente radial en UImage

Cree una nueva image leyendo los píxeles de la image existente (obteniendo su RGBA) línea por línea, agregándolos a la nueva image con los mismos valores RGB, pero ajustando los valores alfa por línea.

Algunas otras preguntas de SO que deberían brindarte todo lo que necesitas para eso:

¿Cómo get datos de píxeles de un UIImage (Cocoa Touch) o CGImage (Core Graphics)?

¿Puedo editar los píxeles de la propiedad del UIImage CGImage

Encontré algo aquí , ¡funciona genial!

 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];