ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Прозрачность 2d ARGB ...
Вот реализовал прозрачность рисунка ,но при отображении реального рисунка (без прозрачности) чёрный цвет невидим ,а как сделать чтоб он не был виден и при прозрачности ?
загрузите своё изображение с чёрным фоном...
код:
Graphics 800,600,32,2
;ssd = LoadImage ("C:\Program Files\Blitz3D\Samples\Blitz 2D Samples\Stone2.bmp")
ssd=CreateImage(32,32)
SetBuffer ImageBuffer(ssd)
Color 0,0,155
Rect 1,1,31,31,1
SetBuffer BackBuffer()
ClsColor 125,111,25
While Not KeyHit(1)
Cls
mx# = MouseX() : my# = MouseY()
Color 255,0,0
Rect 20,20,350,250,1
Color 0,255,0
Rect 250,250,150,150,1
Color 0,0,255
Rect 450,250,150,150,1
Color 255,255,255
Rect 450,20,150,150,1
If KeyHit(200) Then q# = q+ .1
If KeyHit(208) Then q# = q- .1
If q#>1 q# = 1
If q#< 0 q# = 0
AlphaSprite(ssd ,mx,my,q)
Color 255,255,255
Text 700,40 , q
Flip
Wend
End
Function AlphaSprite#(Image%,XP%,YP%,v# =1)
AlphaImage = CopyImage(Image)
W = ImageWidth(AlphaImage)
H = ImageHeight(AlphaImage)
LockBuffer ImageBuffer(AlphaImage)
LockBuffer BackBuffer()
For X = 0 To W - 1
For Y = 0 To H - 1
Value = ReadPixelFast(XP+X,YP+Y,BackBuffer() )
Value2= ReadPixelFast(X,Y,ImageBuffer(AlphaImage))
a1 = GetA(Value )
r1 = GetR(Value )
g1 = GetG(Value )
b1 = GetB(Value )
a2 = GetA(Value2 )
r2 = GetR(Value2 )
g2 = GetG(Value2 )
b2 = GetB(Value2 )
; a= a1*(1-v)+a2*v
r= r1*(1-v)+r2*v
g= g1*(1-v)+g2*v
b= b1*(1-v)+b2*v
alpha = CombineARGB(a,r,g,b)
WritePixelFast x,y, alpha ,ImageBuffer(AlphaImage)
Next
Next
UnlockBuffer ImageBuffer(AlphaImage)
UnlockBuffer BackBuffer()
DrawImage alphaImage,XP,YP
FreeImage alphaimage
End Function
Function GetA(RGB)
Return RGB Shr 24 And %11111111
End Function
Function GetR(RGB)
Return RGB Shr 16 And %11111111
End Function
; return Green value out of a RGB value
Function GetG(RGB)
Return RGB Shr 8 And %11111111
End Function
; return Blue value out of a RGB value
Function GetB(RGB)
Return RGB And %11111111
End Function
; combine Alpha, Red, Green, Blue values to a RGB value
Function CombineARGB#(aa#,rr%,gg%,bb%)
Return aa*$1000000+rr*$10000+gg*$100+bb
End Function
;--------------------------------------------------------------------------------------------------------------
Function Min%(a%,b%)
If a<b Then Return a Else Return b
End Function
Function Max%(a%,b%)
If a>b Then Return a Else Return b
End Function
|