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
Bitmap AlphaBlend
Re: Bitmap AlphaBlend
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
Gruß,
Kirill
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
Grund: Highlighter
Re: Bitmap AlphaBlend
BGRABitmap kann das oder OpBitmap
http://wiki.freepascal.org/BGRABitmap/de
http://wiki.freepascal.org/BGRABitmap/de
-
- 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
@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!
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!