Ich erstelle eine Farbauswahl für iOS. Ich möchte dem Benutzer ermöglichen, die Helligkeit (Luminanz) auszuwählen und das Farbrad diese Änderung reflektieren zu lassen. Ich verwende Core Image, um die Helligkeit mit dem CIColorControls-Filter zu ändern. Hier ist mein Code:Core Image CIColorControls Helligkeitsfilter erzeugt einen falschen Effekt. Wie ändere ich die Luminanz meines Bildes?
-(CIImage *)oldPhoto:(CIImage *)img withBrightness:(float)intensity
{
CIFilter *lighten = [CIFilter filterWithName:@"CIColorControls"];
[lighten setValue:img forKey:kCIInputImageKey];
[lighten setValue:@((intensity * 2.0) - 1.0) forKey:@"inputBrightness"];
return lighten.outputImage;
}
Hier ist, wie das Farbrad mit Intensität sieht = 0,5 (inputBrightness = 0):
Das Problem ist, dass das Farbrad falsch aussieht, wenn Intensität < 0,5. Zum Beispiel, hier ist, wie es mit der Intensität = 0,3 (inputBrightness = -0,4) aussieht:
Hinweis, dass es ein schwarzer Kreis in der Mitte, und der Rest des Bildes nicht richtig entweder verdunkelt . Das soll ein HSL-Farbrad sein, also glaube ich, dass ich eigentlich die Leuchtdichte ändern möchte, nicht die Helligkeit.
Erstens, kann jemand erklären, warum das Bild so aussieht? Ich bin kein Experte für Farbe; Es erscheint merkwürdig, dass das Zentrum des Kreises schnell zu schwarz wird, während die Kanten davon nicht viel dunkler werden.
Zweitens, wie kann ich den gewünschten Effekt erzielen?
Hier ist, wie ich will eigentlich das Bild aussehen:
Dies wurde mit einer benutzerdefinierten HSL-Funktion und Luminanz geschaffen = 0,3. Dies läuft auf der CPU, also ist es viel zu langsam für meine Bedürfnisse. Ich wäre glücklich, den Code für diese HSL-Funktion zu veröffentlichen, aber ich habe es nicht aufgenommen, weil es nicht sofort relevant erschien. Wenn Sie es sehen wollen, fragen Sie einfach.
Bitte lassen Sie mich wissen, wenn Sie Fragen haben oder wenn etwas unklar scheint. Vielen Dank!
Ein einfacher und wahrscheinlich schneller Weg, um Ihr Problem zu lösen, ist ein schwarzen Kreis über die farbigen Kreis zu zeichnen. Das Alpha, das Sie für diesen schwarzen Kreis wählen, bestimmt die Leuchtdichte Ihres farbigen Kreises. Keine Notwendigkeit, alle Farben neu zu berechnen. – mmgp
Versuchen Sie, Ihren Arbeitsfarbraum auf rgb linear zu ändern, wenn Sie Ihren CIContext einrichten – ccgus