Graphics 1024, 768, 32, 2
SetBuffer BackBuffer()
Local Alpha=0 : v = 5
While Not KeyHit(1)
Alpha=Alpha + v
If Alpha <=0
Delay 200
v=5
ElseIf Alpha >= 255
Delay 200
v= -5
EndIf
Color 255,0,0
Rect 0,0,100,100,1
Color 0,0,255
Rect 100,0,100,100,1
Color 0,255,0
Rect 200,0,100,100,1
Color 255,255,0
Rect 300,0,100,100,1
Color 0,255,255
Rect 400,0,100,100,1
Color 128,128,128
Rect 0,100,200,100,1
Color 28,28,28
Rect 0,200,200,100,1
Color 228,228,228
Rect 300,100,200,100,1
Color 255,255,255
Rect 200,100,100,200,1
; AlphaRect(50,50 , 400 , 200, 255, 0, 0, 255 , 1)
AlphaRect(50,50 , 400 , 200, 255, 0, 0, Alpha ,1 )
Color 25,25,25
Text 20, 20, Alpha
Flip:Cls
Wend
End
Function AlphaRect(Point_X# = 0 ,Point_Y# = 0 ,width ,height ,R = 255 ,G = 255 ,B = 255 ,A% = 255 ,border = False)
If A <= 0 And border = False
Return
ElseIf (A <= 0 And border = True ) Or (A > 0 And border = False ) Or (A > 0 And border = True )
Buffer = BackBuffer()
LockBuffer Buffer
RGB = 255 Shl 24 Or R Shl 16 Or G Shl 8 Or B ;
For localY# = Point_Y To Point_Y + height -1
For localX# = Point_X To Point_X + width -1
If localX > 0 And localX < GraphicsWidth() And localY > 0 And localY < GraphicsHeight()
bgRGB = ReadPixelFast (localX ,localY ,Buffer )
WritePixelFast localX ,localY , GetPixelForOpacity( bgRGB , RGB , A),Buffer
If border
NewRGB =(255-RGB *(A-((255-RGB )*(255-bgRGB ) Shr 8)-A) Shr 8)
WritePixelFast localX ,Point_Y , NewRGB ,Buffer
WritePixelFast localX ,Point_Y+ height , NewRGB , Buffer
WritePixelFast Point_X ,localY, NewRGB ,Buffer
WritePixelFast Point_X + width ,localY, NewRGB , Buffer
EndIf
End If
Next : Next
UnlockBuffer Buffer
End If
End Function
Function GetPixelForOpacity( pixelBackground, pixelForeground, pixelAlpha)
If pixelForeground = $ff000000 Then pixelForeground = pixelBackground
bgsourceR = ((pixelForeground And $00FF0000) Shr 16);
bgsourceG = ((pixelForeground And $0000FF00) Shr 8);
bgsourceB = ((pixelForeground And $000000FF));
sourceR = ((pixelBackground And $00FF0000) Shr 16);
sourceG = ((pixelBackground And $0000FF00) Shr 8);
sourceB = ((pixelBackground And $000000FF));
newR = sourceR * pixelAlpha/255 + bgsourceR * ( 255-pixelAlpha)/255;
newG = sourceG * pixelAlpha/255 + bgsourceG * (255- pixelAlpha)/255;
newB = sourceB * pixelAlpha/255 + bgsourceB * (255- pixelAlpha)/255;
Return (255 Shl 24 Or newR Shl 16 Or newG Shl 8 Or newB);
End Function