2012-06-28 13 views
5

Tworzę aplikację, która używa UIImagePickerController, aby zaprezentować użytkownikowi kamerę z niestandardową nakładką, która zawiera jedną z dwóch siatek/wzorców na samym "widoku" aparatu.Dodawanie odcienia do obrazu

Siatki są plikami .png w UIImageView, które są dodawane do nakładki, są dość skomplikowane, więc bardzo chciałbym oderwać się od rysowania siatki w kodzie, mimo że przedstawiałoby to miłą czystość i prosta odpowiedź na moje pytanie.

Chciałbym móc zaoferować siatki w różnych kolorach. Oczywistym rozwiązaniem jest stworzenie większej liczby obrazów w formacie .png w różnych kolorach, ale w przypadku każdego koloru będą musiały istnieć cztery osobne obrazy (regularne i siatkówkowe dla każdej z siatek), aby szybko dodać do wielu zasobów.

Rozwiązanie, które, moim zdaniem, byłoby idealne, byłoby dla mnie po prostu utworzyć siatki w kolorze białym/szarym, a następnie zastosować odcień do niego, aby odpowiednio go pokolorować.

Czy to możliwe? Czy muszę szukać alternatywnego rozwiązania?

+0

zobacz tutaj: http: //stackoverflow.com/questions/1117211/how-would-i-tint-an-image-programatically---the-iphone – shannoga

+2

Czy sprawdziłeś [ten post] [1]? Wydaje się być bliżej tego, czego potrzebujesz. [1]: http://stackoverflow.com/questions/1223340/iphone-how-do-you-color-an-image – Ananth

Odpowiedz

7

Z podziękowaniami dla ananth za wskazanie mi iPhone - How do you color an image?

Dodałem tę metodę do mojego kodu, jak zasugerowano w pytaniu z modyfikacją w willc2 za odpowiedź:

-(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; 
} 

... i Dostaję dokładnie to, po co jestem.

+0

Nie używaj tego produktu. Zmniejsza to jakość obrazu. Użyj tego, bez utraty jakości: http://stackoverflow.com/a/4630136/320018 –