2012-06-28 13 views
5

Estoy creando una aplicación que usa UIImagePickerController para presentar una cámara al usuario con una superposición personalizada que incluye una de dos cuadrículas/patrones sobre la "vista" de la cámara.Agregar un tinte a una imagen

Las cuadrículas en sí son archivos .png en un UIImageView que se agrega a la superposición, son bastante complejos, por lo que realmente me gustaría alejarme de dibujar la cuadrícula en código, aunque eso sería agradable y limpio. respuesta simple a mi pregunta.

Me gustaría poder ofrecer las cuadrículas en una variedad de colores. La solución obvia es crear más imágenes .png en diferentes colores, pero para cada color debería haber cuatro imágenes separadas (regular y retina para cada una de las cuadrículas) para que se agreguen rápidamente a muchos activos.

La solución que, creo, sería ideal, sería para mí simplemente crear las cuadrículas en blanco/gris y luego aplicarle un tinte para colorearlo apropiadamente.

¿Es posible? ¿O necesito buscar una solución alternativa?

+0

mira aquí: http: //stackoverflow.com/questions/1117211/how-would-i-tint-an-image-programatically-on-the-iphone – shannoga

+2

¿Has marcado [esta publicación] [1]? Parece más cercano a lo que necesitas. [1]: http://stackoverflow.com/questions/1223340/iphone-how-do-you-color-an-image – Ananth

Respuesta

7

Con gracias a Ananth por dirigirme a iPhone - How do you color an image?

He añadido este método para mi código como se sugiere en la pregunta, con la modificación de la respuesta de willc2:

-(UIImage *)colorizeImage:(UIImage *)baseImage color:(UIColor *)theColor { 
    UIGraphicsBeginImageContext(baseImage.size); 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height); 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -area.size.height); 
    CGContextSaveGState(ctx); 
    CGContextClipToMask(ctx, area, baseImage.CGImage); 
    [theColor set]; 
    CGContextFillRect(ctx, area); 
    CGContextRestoreGState(ctx); 
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply); 
    CGContextDrawImage(ctx, area, baseImage.CGImage); 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

... y Obtengo exactamente lo que busco.

+0

No utilice este. Disminuye la calidad de la imagen. Use esto, sin perder calidad: http://stackoverflow.com/a/4630136/320018 –

Cuestiones relacionadas