Sto creando un selettore di colori per iOS. Vorrei abilitare l'utente a selezionare la luminosità (luminanza) e fare in modo che la ruota dei colori rifletta questa modifica. Sto usando Core Image per modificare la luminosità con il filtro CIColorControls. Ecco il mio codice:Immagine principale Il filtro di luminosità CIColorControls crea un effetto errato. Come posso cambiare la luminanza della mia immagine?
-(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;
}
Ecco come la ruota dei colori guarda con intensità = 0.5 (inputBrightness = 0):
Il problema è che la ruota dei colori sembra sbagliato quando l'intensità < 0.5. Ad esempio, ecco come si guarda con intensità = 0.3 (inputBrightness = -0.4):
Si noti che c'è un cerchio nero al centro, e il resto dell'immagine non è stata oscurata in modo corretto sia . Questa dovrebbe essere una ruota dei colori HSL, quindi suppongo che ciò che effettivamente voglio cambiare sia la luminanza, non la luminosità.
In primo luogo, qualcuno può spiegare perché l'immagine assomiglia a questo? Non sono un esperto di colori; sembra strano che il centro del cerchio si graffi rapidamente al nero, mentre i suoi bordi non si scuriscono molto.
In secondo luogo, come posso ottenere l'effetto desiderato?
Ecco come ho effettivamente desidera che l'immagine di guardare:
Questo è stato creato con una funzione di HSL costume e luminanza = 0.3. Funziona sulla CPU, quindi è troppo lento per le mie esigenze. Sarei felice di pubblicare il codice per questa funzione HSL, ma non l'ho incluso perché non sembrava immediatamente rilevante. Se vuoi vederlo, basta chiedere.
Per favore fatemi sapere se avete domande, o se qualcosa sembra poco chiaro. Grazie!
Un modo semplice e veloce, probabilmente per risolvere il problema è quello di disegnare un cerchio nero sopra il vostro cerchio colorato. L'alfa che scegli per questo cerchio nero determina la luminanza del tuo cerchio colorato. Non è necessario ricalcolare tutti i colori. – mmgp
Provare a modificare lo spazio colore di lavoro su rgb linear quando si installa CIContext – ccgus