Puoi spiegarmi la differenza tra kCGImageAlphaPremultipliedFirst
e kCGImageAlphaFirst
? Cosa significa in pratica Premultiplied
?kCGImageAlphaPremultipliedFirst e kCGImageAlphaFirst
risposta
In breve, premoltiplicato significa che il valore alfa influenzerà anche i valori dei componenti di colore dei pixel quando viene rappresentato un pixel che non è opaco.
Dalla guida disegno Quartz 2D:
Per bitmap che hanno una componente alfa, se i componenti del colore sono già moltiplicate per il valore alfa. Premoltiplied alpha descrive un colore di origine i cui componenti sono già moltiplicati per un valore alfa . Il precomplesso accelera il rendering di un'immagine di eliminando un'operazione di moltiplicazione extra per componente di colore. Nell'esempio , in uno spazio cromatico RGB, il rendering di un'immagine con alphapremoltiplicato elimina tre operazioni di moltiplicazione (tempi rossi alfa, volte alfa verde e blu volte alfa) per ciascun pixel nell'immagine.
BTW, Pre-Multiplied è probabilmente quello che le API ti obbligheranno a utilizzare perché questa è la preferenza di Quartz. Fortunatamente, le conversioni non sono terribili (perdita di OTOH ...).
la via più breve per spiegare questo è in float
componenti, utilizzando la gamma [0...1]
.
Se la nostra rappresentazione di ingresso RGBA è:
typedef struct t_rgba { float r,g,b,a; } t_rgba;
const t_rgba rgba = { 0.5, 0.5, 0.5, 0.5 };
Poi di controllare la validità moltiplicarlo:
t_rgba rgba_PreMul = rgba;
rgba_PreMul.r *= rgba_PreMul.a;
rgba_PreMul.g *= rgba_PreMul.a;
rgba_PreMul.b *= rgba_PreMul.a;
Poi a de-pre-moltiplicarlo:
t_rgba rgba_DePreMul = rgba_PreMul;
if (0.0 < rgba_DePreMul.a && 1.0 > rgba_DePreMul.a) {
const float ialpha = 1.0/rgba_DePreMul.a;
rgba_DePreMul.r *= ialpha;
rgba_DePreMul.g *= ialpha;
rgba_DePreMul.b *= ialpha;
}
si potrebbe voglio anche un po 'di saturazione.
Questa è la forma base, che può essere riproposta ad altre rappresentazioni numeriche. Tieni presente che queste conversioni sono in perdita. Inoltre, fai attenzione a non superare le bitmap premoltiplicate in cui sono previste normali bitmap e viceversa.
- 1. Combinando CGBitmapInfo e CGImageAlphaInfo a Swift
- 2. Quale metodo per ridimensionare UIImage è migliore e perché?
- 3. Kit sprite e colorWithPatternImage
- 4. JSON e e JSON E
- 5. Come si modifica il colore di sfondo e di primo piano di un filtro CIQRCodeGenerator CIFilter
- 6. e vs * e | vs +
- 7. Sostituire "#", "$", "%", "&" e "_" con "\ #", "\ $", "\%", "\ &" e "\ _"
- 8. CSS "e" e "o"
- 9. Funzionalità e Linux e Java
- 10. python se condizione e "e"
- 11. Che cosa è e = e | =
- 12. CQRS e notifica e-mail
- 13. Controlli WPF e Silverlight e funzionalità di panoramica e zoom
- 14. Prestazioni e ordinamento e distinti unici tra mysql e php
- 15. Comprendere l'operatore PHP e (e commerciale, bit a bit e)
- 16. Qual'è la differenza tra -E sed e sed -e
- 17. Bash - Elenca e ordina i file e le loro dimensioni e per nome e dimensione
- 18. Infissi e selenio e rotaie (oh mio?)
- 19. NServiceBus e NHibernate - Message Handler e transazioni
- 20. Boost.Python e CMake collegare e caricare errori
- 21. funzione statica e variabile statica e variabile
- 22. Sed e Awk in uscita e commerciale (&)
- 23. ice_cube e ricorrenti gemme e occorrenze
- 24. Localizzazione e datiAnnotazioni. GlobalResourceProxyGenerator e PublicResxFileCodeGenerator
- 25. getComputedStyle() e cssText in IE e Firefox
- 26. viewWillTransitionToSize e navigazione errataBar e statusBarFrame heights
- 27. E-mail di ritorno FacebookSDK e Swift
- 28. CloudBees e App Cellule, istanze e piscine
- 29. JS angolare e direttiva Link e timeout $
- 30. Sottraendo uint e int e costante ripiegamento
Ho il pixel [(255/255,0), (100/255,0), (20/255,0), (40/255,0)]. Se capisco correttamente 'premoltiplied' significa che' red * = (40/255.0) 'e così via, ma quando uso' kCGImageAlphaFirst' quindi 'red = red'? –
@TomaszSzulc si. e ampliato. – justin
Grazie mille. –