Entwickler-Ecke

Multimedia / Grafik - Vormultiplizierte Alpha-Komponente


Addy - Mo 29.07.02 16:46
Titel: Vormultiplizierte Alpha-Komponente
Hallo!

Wie macht sich eine vormultiplizierte ("premultiplied") Alpha-Komponente bemerkbar? D.h., wie verhält sich ein Bitmap mit diesem Pixelformat beim Zeichnen und Kopieren (sowohl als Ziel als auch als Quelle)? Im PSDK steht dazu nichts :(


MathiasH - Mi 31.07.02 11:58

bitte was soll das sein, nie gehört, hat wohl was mit Transparenz zu tun, aber was, ich würde sagen die Farbwerte von Back und img werden multipliziert, aber sonst :?: :?: :?:

MathiasH


Addy - Fr 02.08.02 11:57

Aus dem PSDK, May 2002 Edition zum Thema "Image Pixel Format Constants" Konstante "PixelFormat32bppPARGB":
Zitat:
Specifies that the format is 32 bits per pixel; 8 bits each are used for the alpha, red, green, and blue components. The red, green, and blue components are premultiplied according to the alpha component.


Das Alpha-Blending funktioniert genauso wie bei einem nicht-Alpha-vormultiplizierten Format, aber irgend einen Nachteil muss es doch haben, schließlich ist es fast doppelt so schnell.


MathiasH - Fr 02.08.02 19:26

es gibt schlieslich auch images, obwohl man alles schneller mit DelphiX amachen kann-> es miss nicht unbedingt nachteile Haben, vielleicht sind diese aber schwieriger in der Anwendung

So wie ich das verstehe haben diese Dinger den Zweck, dass man seinen alpha wert nicht selber ausrechnen muss, und auch über ihn den Farbton ändern kann, aber einen wirklichen Sinn kann ich darin auch nicht entdecken. :cry:

Ach ja der Geschwindigkeits Vorteil: Es liegt vielleich daran, dass 24bit nicht gerade die beste Speicher Architektur ist, und er mit 32bit (=2^6!!!) schneller arbeiten kann.

MathiasH


Addy - Fr 09.08.02 11:16

@MathiasH: Hast du überhaupt schonmal mit GDI+ gearbeitet? Es scheint nämlich, dass du gar nicht weißt, was ich meine.
Delphi-Images haben übrigens nichts mit GDI+ zu tun.


MathiasH - Fr 09.08.02 11:27

erwischt :wink:
ich hab mal ein bisschen damit rumgespielt, aber mehr auch nicht, klar weis ich was das ist

MathiasH


Addy - Sa 10.08.02 11:57

Du solltest Politiker werden :wink:
Naja, hat sich vorerst sowieso erledigt, da ich voraussichtlich jetzt Textures mit TL-Vertices benutze, um die Sprites auf den Bildschirm zu bringen.


OregonGhost - So 11.08.02 09:56

Also, Alphablending geht so:
Wir haben eine Quellfarbe (S) und eine Zielfarbe (D). Bei herkömmlicher Alphaberechnung läuft das so:
(.r, .g, .b, .a sind die Farbkomponenten Rot, Grün, Blau, Alpha)

Quelltext
1:
2:
3:
D.r = S.r * S.a + D.r * (1 - S.a);
D.g = S.g * S.a + D.g * (1 - S.a);
D.b = S.b * S.a + D.b * (1 - S.a);

Bei vormultipliziertem Alpha sind S.r, S.g, S.b bereits mit S.a multipliziert worden, so dass die Rechnung so aussieht:

Quelltext
1:
2:
3:
D.r = S.r + D.r * (1 - S.a);
D.g = S.g + D.g * (1 - S.a);
D.b = S.b + D.b * (1 - S.a);

Da nun nur noch eine Multiplikation auftritt ist es fast doppelt so schnell. Logisch, oder?
Der Nachteil ist nur, dass man die Grafik schlecht ohne Alphablending anzeigen kann.


Addy - So 11.08.02 10:43

Danke, du hast mir sehr geholfen :)