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
- 
				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
@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!

 Verein
Verein 
 Links
Links Suche
Suche