2012-06-28 4 views
5

Sto creando un'applicazione che utilizza UIImagePickerController per presentare una telecamera all'utente con una sovrapposizione personalizzata che include una delle due griglie/motivi sulla "vista" della telecamera stessa.Aggiunta di una tinta a un'immagine

Le griglie stesse sono file .png in un UIImageView che viene aggiunto all'overlay, sono piuttosto complessi, quindi mi piacerebbe davvero allontanarmi dal disegnare la griglia in codice, anche se ciò presenterebbe il mio pulito e pulito risposta semplice alla mia domanda.

Mi piacerebbe essere in grado di offrire le griglie in una varietà di colori. La soluzione più ovvia è creare più immagini .png in diversi colori, ma per ogni colore ci dovrebbero essere quattro immagini separate (regolare e retina per ciascuna delle griglie) in modo da aggiungere rapidamente un sacco di risorse.

La soluzione che, penso, sarebbe ideale, sarebbe per me solo creare le griglie in bianco/grigio e quindi applicare una tinta ad esso per colorarlo in modo appropriato.

È possibile? O devo cercare una soluzione alternativa?

+0

guarda qui: http: //stackoverflow.com/questions/1117211/how-would-i-int-an-image-programatically-on-the-iphone – shannoga

+2

hai controllato [questo post] [1]? Sembra più vicino a quello che ti serve. [1]: http://stackoverflow.com/questions/1223340/iphone-how-do-you-color-an-image – Ananth

risposta

7

Con grazie a Ananth per me indicando iPhone - How do you color an image?

ho aggiunto questo metodo per il mio codice come suggerito nella questione, con la modifica in risposta di 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; 
} 

... e Sto ottenendo esattamente quello che sto cercando.

+0

Non utilizzare questo. Riduce la qualità dell'immagine. Usa questo, senza perdere qualità: http://stackoverflow.com/a/4630136/320018 –