Tworzę próbnik kolorów na iOS. Chciałbym umożliwić użytkownikowi wybranie jasności (luminancji) i odzwierciedlenie tej zmiany w kole kolorów. Używam Core Image do modyfikacji jasności przy pomocy filtru CIColorControls. Oto mój kod:Obraz podstawowy Filtr jasności CIColorControls tworzy zły efekt. Jak zmienić luminację obrazu?
-(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;
}
Oto jak wygląda koło kolorów z intensywnością = 0,5 (inputBrightness = 0):
Problem polega na tym, że koło kolor wygląda źle, gdy intensywność < 0.5. Na przykład, oto jak to wygląda z intensywnością = 0,3 (inputBrightness = -0,4):
Zauważ, że istnieje czarny okrąg w środku, a reszta obrazu nie został zaciemniony poprawnie albo . To ma być koło kolorów HSL, więc domyślam się, że to, co chcę zmienić, to luminancja, a nie jasność.
Po pierwsze, czy ktoś może wyjaśnić, dlaczego obraz wygląda tak? Nie jestem ekspertem od koloru; dziwne wydaje się, że środek koła szybko przycina się na czarno, a jego krawędzie nie są zbyt ciemne.
Po drugie, w jaki sposób mogę uzyskać pożądany efekt?
Oto jak ja faktycznie obraz ma wyglądać:
ten został stworzony z funkcją zwyczaj HSL i luminancji = 0,3. To działa na procesorze, więc jest zbyt wolny dla moich potrzeb. Z przyjemnością opublikuję kod dla tej funkcji HSL, ale nie uwzględniłem jej, ponieważ nie wydawało się to natychmiast istotne. Jeśli chcesz to zobaczyć, po prostu zapytaj.
Proszę dać mi znać, jeśli masz jakieś pytania lub jeśli cokolwiek wydaje się być niejasne. Dzięki!
Łatwym i prawdopodobnie szybko sposobem rozwiązania problemu jest narysować czarne kółko nad swoim kolorowym kole. Alfa, którą wybierzesz dla tego czarnego koła, określa luminancję twojego kolorowego koła. Nie ma potrzeby przeliczania wszystkich kolorów. – mmgp
Spróbuj zmienić roboczą przestrzeń kolorów na liniową wartość rgb po skonfigurowaniu CIContext – ccgus