vitaminas tos resfriado que prevenir por periodo para normal gripe evitar esta empezando contagiosa contagio contagia como besos beso objective-c core-graphics quartz-2d

objective c - tos - Cómo usar un UIImage como máscara sobre un color en Objective-C



periodo contagio resfriado (4)

Aquí hay una variación en Swift 3, escrita como una extensión de UIImage:

extension UIImage { func tinted(color:UIColor) -> UIImage? { let image = self let rect:CGRect = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size) UIGraphicsBeginImageContextWithOptions(rect.size, false, image.scale) let context = UIGraphicsGetCurrentContext()! image.draw(in: rect) context.setFillColor(color.cgColor) context.setBlendMode(.sourceAtop) context.fill(rect) if let result:UIImage = UIGraphicsGetImageFromCurrentImageContext() { UIGraphicsEndImageContext() return result } else { return nil } } } // Usage let myImage = #imageLiteral(resourceName: "Check.png") // any image let blueImage = myImage.tinted(color: .blue)

Tengo un UIImage que es todo negro con un canal alfa, por lo que algunas partes son de color grisáceo y otras partes son completamente transparentes. Quiero usar esas imágenes como una máscara sobre algún otro color (digamos blanco para que sea más fácil), por lo que el producto final ahora es una imagen en blanco con partes de ella transparentes.

He estado buscando en el sitio de documentación de Apple aquí: http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-CJBHIJEB

Pero soy completamente nuevo en Quartz / Core Graphics, así que no puedo entender esos ejemplos.

¿Alguien sabe de un enlace a algunos ejemplos de código completo que podría usar para mirar?


He convertido esto para OSX here como una categoría y copiado a continuación. Tenga en cuenta que esto es para proyectos que no son ARC. Para proyectos ARC, el autorelease puede ser eliminado.

- (NSImage *)cdsMaskedWithColor:(NSColor *)color { CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); NSImage *result = [[NSImage alloc] initWithSize:self.size]; [result lockFocusFlipped:self.isFlipped]; NSGraphicsContext *context = [NSGraphicsContext currentContext]; CGContextRef c = (CGContextRef)[context graphicsPort]; [self drawInRect:NSRectFromCGRect(rect)]; CGContextSetFillColorWithColor(c, [color CGColor]); CGContextSetBlendMode(c, kCGBlendModeSourceAtop); CGContextFillRect(c, rect); [result unlockFocus]; return [result autorelease]; } + (NSImage *)cdsMaskedImageNamed:(NSString *)name color:(NSColor *)color { NSImage *image = [NSImage imageNamed:name]; return [image cdsMaskedWithColor:color]; }


Traduciendo la respuesta de Jano en Swift:

func ipMaskedImageNamed(name:String, color:UIColor) -> UIImage { let image = UIImage(named: name) let rect:CGRect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: image!.size.width, height: image!.size.height)) UIGraphicsBeginImageContextWithOptions(rect.size, false, image!.scale) let c:CGContextRef = UIGraphicsGetCurrentContext() image?.drawInRect(rect) CGContextSetFillColorWithColor(c, color.CGColor) CGContextSetBlendMode(c, kCGBlendModeSourceAtop) CGContextFillRect(c, rect) let result:UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return result }

Uso:

myButton.setImage(ipMaskedImageNamed("grayScalePNG", color: UIColor.redColor()), forState: .Normal)

Edición : según este article , puede convertir una imagen en una máscara cuyas áreas opacas están representadas por el color del tinte. Dentro del catálogo de activos, en el Inspector de atributos de la imagen, cambie Renderizar como imagen de plantilla . No es necesario el código.


En iOS 7+ deberías usar UIImageRenderingModeAlwaysTemplate en UIImageRenderingModeAlwaysTemplate lugar. Consulte https://.com/a/26965557/870313

Creación de iconos de colores arbitrarios a partir de una imagen maestra negra con alfa (iOS).

// Usage: UIImage *buttonImage = [UIImage ipMaskedImageNamed:@"UIButtonBarAction.png" color:[UIColor redColor]]; + (UIImage *)ipMaskedImageNamed:(NSString *)name color:(UIColor *)color { UIImage *image = [UIImage imageNamed:name]; CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale); CGContextRef c = UIGraphicsGetCurrentContext(); [image drawInRect:rect]; CGContextSetFillColorWithColor(c, [color CGColor]); CGContextSetBlendMode(c, kCGBlendModeSourceAtop); CGContextFillRect(c, rect); UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; }

Créditos a Ole Zorn: https://gist.github.com/1102091