2010-09-07 9 views
8

consente di assumere un alfa di 1 significa completamente opaco e 0 significa completamente trasparente. diciamo che ho due immagini nere con una trasparenza del 50% (alfa = 0,5).per il valore alfa quando si fondono due colori trasparenti

se sono posizionati uno sopra l'altro, la trasparenza risultante è 0,75, giusto?

se avessero un alfa di 0,25, il risultato sarebbe intorno a 0,5, giusto?

se avessero un alfa di 0.9, il risultato sarebbe intorno a 0.97, giusto?

come si arriva a questi numeri?

in altre parole, sto cercando una funzione che ottiene il valore alfa risultante da altri due valori alpha.

float alpha = f(float alphaBelow, float alphaAbove) 
{ 
    //TODO implement 
} 
+0

Convenzionalmente, il colore è opaco quando alfa = 1, e completamente trasparenti quando l'alfa = 0. Quindi l'alfa risultante di posa di un 50% in aggiunta al 50% dovrebbe essere 25%, non 75%. – kennytm

+0

@KennyTM, ok, modificherò il mio post per lavorare con float da 0 a 1 – clamp

risposta

6

Questa risposta è matematicamente la stessa Jason's answer, ma questa è la formula attuale e lo troverete nel materiale di riferimento.

float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + (1.0 - alphaBelow) * alphaAbove; 
} 
6
float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + alphaAbove - alphaBelow * alphaAbove; 
} 

Questa funzione assume entrambi i parametri sono 0..1, dove 0 è completamente trasparente e 1 è completamente opaco.

+0

grazie, è quasi come il mio risultato desiderato. è solo che quando paragono il risultato con due immagini l'una sull'altra in Photoshop, la versione di Photoshop sembra avere valori alfa un po 'più alti. – clamp

3

Photoshop fa il seguente calcolo:

float blend(float alphaBelow, float alphaAbove) 
{ 
    return min(1,alphaBelow+(1-alphaBelow)*alphaAbove); 
} 
+1

Il 'min' è ridondante se entrambi gli ingressi si trovano nell'intervallo 0..1. –

Problemi correlati