Ändern der Farbe von UIImage
Ich versuche es zu ändern Farbe von UIImage. Mein code:
-(UIImage *)coloredImage:(UIImage *)firstImage withColor:(UIColor *)color {
UIGraphicsBeginImageContext(firstImage.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[color setFill];
CGContextTranslateCTM(context, 0, firstImage.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGRect rect = CGRectMake(0, 0, firstImage.size.width, firstImage.size.height);
CGContextDrawImage(context, rect, firstImage.CGImage);
CGContextClipToMask(context, rect, firstImage.CGImage);
CGContextAddRect(context, rect);
CGContextDrawPath(context,kCGPathElementMoveToPoint);
UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return coloredImg;
}
Dieser code funktioniert, aber erhalten Bild ist nicht so gut wie sein soll: bounds Pixel Bild zurückgegeben werden intermittierende und nicht so glatt wie in meinem ersten Bild. Wie kann ich dieses problem beheben?
InformationsquelleAutor der Frage RomanHouse | 2012-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit iOS 7 ist dies der einfachste Weg, es zu tun.
Swift 2.0+
Swift 4.0 und höher
Per storyboard
Konfigurieren Sie zunächst das Bild als Vorlage ( auf der rechten Leiste - Rendern als) in Ihr Vermögen. Dann die Farbe von dem Bild wäre die Farbe aufgetragen.
InformationsquelleAutor der Antwort Ankish Jain
Dies ist so ziemlich die Antwort oben, aber etwas verkürzt. Dies dauert nur das Bild als Maske und nicht wirklich "multiplizieren" oder Farbe des Bildes.
Ziel C:
Swift:
InformationsquelleAutor der Antwort user1270061
In Swift 3.0
In Swift 2.0
Genießen Sie Swift-Pioniere
InformationsquelleAutor der Antwort ColossalChris
Anderen Weg, um Farbton eines Bildes ist einfach, multiplizieren Sie es durch eine Konstante Farbe. Manchmal ist dies vorzuziehen, weil es nicht "heben" die Werte für die Farbe in schwarze Bereiche auf; es hält den relativen Intensitäten im Bild sind die gleichen. Mit einem overlay als Farbton neigt zu verflachen Sie den Kontrast.
Dies ist der code den ich benutze:
Swift version
InformationsquelleAutor der Antwort Anna Dickinson
Hier ist meine Anpassung von @Anna die Antwort. Zwei wichtige Punkte hier:
destinationIn
blending modeUIGraphicsBeginImageContextWithOptions(backgroundSize, false, UIScreen.main.scale)
zu bekommen glatte BildCode in Swift 3:
InformationsquelleAutor der Antwort algrid
Basis auf @Anna die Antwort und ich umschreiben, für swift 2.2 und übernimmt das Bild mit alpha-Kanal:
InformationsquelleAutor der Antwort Bill Chan
Wenn Sie nicht zu tun haben, es programmatisch, können Sie einfach tun Sie es mit Xcode UI.
Wenn Sie gehen, um das Bild in Ihre Bild-assets-Ordner, öffnen Sie den Inspektor auf der rechten Seite und es wird ein "Rendern Als" dropdown-Liste mit den folgenden Optionen:
Sobald Sie aus der Template-Auswahl können Sie die tintColor des Bildes, aber Sie wollen, - ob Sie mit der Xcode storyboard-Benutzeroberfläche oder programmgesteuert.
Siehe dieses Bild:
InformationsquelleAutor der Antwort Mario A Guzman
Hier ein Swift-4.1-version, wie Farbe ein UIImage:
InformationsquelleAutor der Antwort Florian Marcu
Anna ' s code funktioniert gut für das kopieren eines UIImage.Bild über einen farbigen .Bild hintergrund mit kCGBlendModeNormal eher als kCGBlendModeMultiply. Zum Beispiel
self.mainImage.image = [self NormalImageByConstantColor: self.mainImage.image withColor: yourColor];
wird der Inhalt der mainImage.Bild über den Farbton yourColor wobei die Deckkraft von yourColor. Dies löste mein problem der Platzierung einer Hintergrundfarbe mit Deckkraft hinter einem Bild gespeichert werden, um die Kamera Rolle.InformationsquelleAutor der Antwort Lowell Bahner
Swift 3:
InformationsquelleAutor der Antwort Nursultan Askarbekuly
Swift 3.0 version von Anna ist wunderbar-code:
InformationsquelleAutor der Antwort Matthieu