Jaecko
12.09.2010, 11:44
Moin.
Bei einem Projekt lass ich von einem AVR Bitmaps auf einem Farb-LCD anzeigen. Klappt soweit auch ganz gut.
Das Format der Bitmaps ist ein eigenes relativ einfaches ARGB-Format, d.h. je ein 4-Byte-Block für Alpha, Rot, Grün, Blau.
Für "transparente" Bereiche (Hintergrund soll durchscheinen), verwend ich ein einfaches Chromakey-Verfahren, d.h. z.B. die Farbe Magenta kommt im Icon nicht vor; alle Pixel in dieser Farbe werden einfach nicht dargestellt (Hintergrund bleibt erhalten)
Nun gibts jedoch auch Icons, bei denen ein Pixel am Rand halbtransparent ist, d.h. der Hintergrund UND die jeweilige Pixelfarbe sollen gemischt werden; der Alphakanal muss also ausgewertet werden.
(Je kleiner Alpha, um so mehr transparent ist das jeweilige Pixel)
Nun die Frage: Wie mischt man hier (mathematisch) am besten, wenn die folgenden Dinge bekannt sind:
- RGB-Wert Hintergrund
- RGB-Wert darzustellendes Pixel
- Alpha-Wert darzustellendes Pixel
Ein einfacher Mittelwert wirds ja vermutlich nicht sein.
Ebenso glaub ich nicht, dass es was wie R(neu) = R(background) + (alpha/255 * R(foreground)) ist.
mfG
Bei einem Projekt lass ich von einem AVR Bitmaps auf einem Farb-LCD anzeigen. Klappt soweit auch ganz gut.
Das Format der Bitmaps ist ein eigenes relativ einfaches ARGB-Format, d.h. je ein 4-Byte-Block für Alpha, Rot, Grün, Blau.
Für "transparente" Bereiche (Hintergrund soll durchscheinen), verwend ich ein einfaches Chromakey-Verfahren, d.h. z.B. die Farbe Magenta kommt im Icon nicht vor; alle Pixel in dieser Farbe werden einfach nicht dargestellt (Hintergrund bleibt erhalten)
Nun gibts jedoch auch Icons, bei denen ein Pixel am Rand halbtransparent ist, d.h. der Hintergrund UND die jeweilige Pixelfarbe sollen gemischt werden; der Alphakanal muss also ausgewertet werden.
(Je kleiner Alpha, um so mehr transparent ist das jeweilige Pixel)
Nun die Frage: Wie mischt man hier (mathematisch) am besten, wenn die folgenden Dinge bekannt sind:
- RGB-Wert Hintergrund
- RGB-Wert darzustellendes Pixel
- Alpha-Wert darzustellendes Pixel
Ein einfacher Mittelwert wirds ja vermutlich nicht sein.
Ebenso glaub ich nicht, dass es was wie R(neu) = R(background) + (alpha/255 * R(foreground)) ist.
mfG