Для тех ,кто привык задавать значения от 0.0 до 1.0
Function AlphaRect(Point_X# = 0 ,Point_Y# = 0 ,width ,height ,R = 255 ,G = 255 ,B = 255 ,A# = 1.0 ,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 =(1.0-RGB *(A-((1.0-RGB )*(1.0-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/1.0 + bgsourceR * ( 1.0-pixelAlpha)/1.0;
newG = sourceG * pixelAlpha/1.0+ bgsourceG * (1.0- pixelAlpha)/1.0;
newB = sourceB * pixelAlpha/1.0+ bgsourceB * (1.0- pixelAlpha)/1.0;
Return (255 Shl 24 Or newR Shl 16 Or newG Shl 8 Or newB);
End Function