我正在爲iOS創建顏色選擇器。我想讓用戶選擇亮度(亮度)並讓色輪反映這種變化。我正在使用Core Image來修改CIColorControls過濾器的亮度。這裏是我的代碼:Core Image CIColorControls亮度過濾器會產生錯誤的效果。我如何改變圖像的亮度?
-(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;
}
這裏的色輪的外觀與強度= 0.5(inputBrightness = 0):
的問題是,色輪看上去錯了,當強度< 0.5。例如,這裏是它的外觀與強度= 0.3(inputBrightness = -0.4):
請注意,有一個在中間的黑圈,與圖像的其餘部分沒有正確或者變暗。這應該是一個HSL色輪,所以我想我實際想要改變的是亮度,而不是亮度。
首先,任何人都可以解釋爲什麼圖像看起來像這樣?我不是色彩方面的專家;看起來奇怪的是,這個圓圈的中心很快就會變成黑色,而它的邊緣並沒有變得很暗。
二,如何才能達到我想要的效果?
以下是我真正想要的形象看:
這是一個自定義功能HSL和亮度值= 0.3創建的。這在CPU上運行,所以對我的需求來說太慢了。我很樂意發佈這個HSL函數的代碼,但是我沒有包含它,因爲它似乎沒有立即相關。如果你想看到它,請問。
如果您有任何疑問,或者有任何疑問,請讓我知道。謝謝!
一個簡單而快速的可能的方式來解決你的問題是畫在你的彩色圓圈黑色圓圈。您爲這個黑色圓圈選擇的alpha值決定了您的彩色圓圈的亮度。無需重新計算所有顏色。 – mmgp
嘗試在設置CIContext時將工作色彩空間更改爲rgb線性 – ccgus