.. .. .. ..   ..
BlitzBasic > Codearchiv > GrafikAktuallisiert 30.05.2009

..  Bilder mit Transparenzfaktor zeichnen - von Triton 
Folgende Funktion funktioniert im Grunde wie die normalen Befehle Drawimage und Drawblock, nur dass man noch einen Transparenzfaktor angeben kann. Eine nützliche Erweiterung für Blitz2D, das sowas von Haus aus nicht kann. Das ganze ist relativ langsam, es besitzt aber an vielen Ecken noch Potenzial für Optimierungen.

;*** Zeichnet Bilder mit Transparenz
;*** 14.10.2005, by Triton
;*** http://www.silizium-net.de
Graphics 800,600,32,2
SetBuffer BackBuffer()
HidePointer

Dim alphaimage(GraphicsWidth(),GraphicsHeight())
bild=LoadImage("d:\ablage\sweet.jpg")
bg=LoadImage("d:\ablage\radio.jpg")

Color 255,255,255 
SetBuffer BackBuffer()

While Not KeyDown(1)
	If MouseDown(1) Then a=a+5
	If MouseDown(2) Then a=a-5
	DrawBlock(bg,0,0)
	drawalphaimage(bild,MouseX(),MouseY(),a)
	Plot MouseX(),MouseY()
	If a < 0 Then a = 0
	If a > 100 Then a = 100
	Text 10,10, "Maustaste L/R zur Änderung der Deckung: "+a+"%"
Flip
Cls
Wend


;---
Function drawalphaimage(pic,x,y,a) ;a=0(transp)-100(deckend)
If a <= 0 Then Return
If a => 100 Then 
	DrawBlock(pic,x,y)
	Return
End If

SetBuffer ImageBuffer(pic)	;einlesen des Bildes
LockBuffer ImageBuffer(pic)
For scanx = 0 To ImageWidth(pic)-1
	For scany= 0 To ImageHeight(pic)-1
		alphaimage(scanx,scany)=ReadPixelFast(scanx,scany)
	Next
Next
UnlockBuffer ImageBuffer(pic)

SetBuffer BackBuffer()	; auslesen des Hintergrundes und
LockBuffer BackBuffer()	; mischen und malen der neuen Pixel
For scanx = 0 To ImageWidth(pic)-1
	For scany= 0 To ImageHeight(pic)-1
		rgb2=ReadPixelFast(scanx+x,scany+y)
		rbg=(rgb2 And $FF0000)/$10000
		gbg=(rgb2 And $FF00)/$100
		bbg=rgb2 And $FF
		rpic=(alphaimage(scanx,scany) And $FF0000)/$10000
		gpic=(alphaimage(scanx,scany) And $FF00)/$100
		bpic=alphaimage(scanx,scany) And $FF
		rneu=rbg*(1.0-(a/100.0))+rpic*a/100.0
		gneu=gbg*(1.0-(a/100.0))+gpic*a/100.0
		bneu=bbg*(1.0-(a/100.0))+bpic*a/100.0
		rgbneu=255*$1000000 + rneu*$10000 + gneu*$100 + bneu
		WritePixelFast(scanx+x,scany+y,rgbneu)
	Next
Next
UnlockBuffer BackBuffer()

End Function