10.10.2015, 20:01
|
#1
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Прозрачный прямоугольник с краем
Прямоугольник с изменяемой прозрачностью в пределах от 0 до 255.
Так же есть возможность отрисовки полупрозрачного борта .
Код функции под спойлером :
;===============================================
;
; Transparent Rect , alpha% = ( from 0 to 255 )
;
;
;===============================================
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
P.S. Думаю тут и без скриншота всё понятно .
__________________
Мой проект здесь
Последний раз редактировалось polopok, 14.10.2015 в 08:47.
|
(Offline)
|
|