Bitmap AlphaBlend

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Joz
Beiträge: 40
Registriert: Mo 27. Mai 2013, 13:16
OS, Lazarus, FPC: Arch Linux, OpenSuse 13.2, Lazarus 1.4
CPU-Target: AMD64
Wohnort: Berlin

Bitmap AlphaBlend

Beitrag von Joz »

Hallöchen,
Ich bin gerade dabei, ein älteres Delphiprojekt auf Lazarus/Typhon plattformunabhängig neuzuprogrammieren, in dem viel mit Bitmaps gearbeitet wird.
Dabei bin ich auf die Funktion „AlphaBlend“ aus der Unit Windows gestoßen und frage mich: Bietet Lazarus so etwas wie eine plattformunabhängige Version dieser Funktion an?
Oder muss ich sie selbst nachprogrammieren, mit Scanline usw? (*schauder*)
Freue mich auf Antworten,
Joz

Key-Real
Beiträge: 10
Registriert: Sa 28. Sep 2013, 23:36

Re: Bitmap AlphaBlend

Beitrag von Key-Real »

Hi,

hier die AlphaColor Routine, du brauchst dafür
1) getRGBA(color:dword, var r,g,b,a:byte); die aus einer 32bit Farbe die einzelnen Farbschatierungen extrachiert
2) RGBA(r,g,b,a:byte):dword; die aus den einzelnen Farbschatierungen eine 32bit Farbe zusammensetzt


Code: Alles auswählen

Function AlphaColorPAS(Color1,Color2:DWord;Alpha:Byte):DWord;
var r,r1,r2,g,g1,g2,b,b1,b2,Alphanot,a:byte;
begin
    AlphaNot:=255-Alpha;
    getRGBA(color1,r1,g1,b1,a);
    getRGBA(color2,r2,g2,b2,a);
    r:=((r1*Alpha)+(r2*AlphaNot)) shr 8;
    g:=((g1*Alpha)+(g2*AlphaNot)) shr 8;
    b:=((b1*Alpha)+(b2*AlphaNot)) shr 8;
    AlphaColorPAS:=RGBA(r,g,b,a);
end;



Gruß,
Kirill
Zuletzt geändert von Lori am Mo 30. Sep 2013, 12:42, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Bitmap AlphaBlend

Beitrag von theo »

BGRABitmap kann das oder OpBitmap
http://wiki.freepascal.org/BGRABitmap/de

Joz
Beiträge: 40
Registriert: Mo 27. Mai 2013, 13:16
OS, Lazarus, FPC: Arch Linux, OpenSuse 13.2, Lazarus 1.4
CPU-Target: AMD64
Wohnort: Berlin

Re: Bitmap AlphaBlend

Beitrag von Joz »

@Key-Real:
Eine Farben-Misch-Funktion hatte ich schon(aber ohne shr8, gar nicht drauf gekommen). Die Windows-Routine Alphablend mischt zwei Bilder anhand einer Maske oder eines Alpha-Wertes. Meine Frange war jetzt, ob es die plattformunabhängig gibt oder ob ich die Farbmisch-Routine per Scanline auf das Bitmap anwenden soll.
@theo:
BGRABitmap hatte ich mal kurz ausprobiert, aber schon nachdem ich TBitmap und TCanvas.Draw ersetzt hatte, ging die Programmgeschwindigkeit spürbar und deutlich runter. (Ich benutze einen Idle-Timer, das Programm ist fast wie ein Spiel programmiert und voller grafischer Effekte)
OpBitmap hingegen kenne ich nicht und werde es mal ausprobieren.

Danke für die Antworten!

Antworten