Показать сообщение отдельно
Старый 27.10.2012, 08:48   #2
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: Прозрачность 2d ARGB ...

Ха! для рисунка проблему решил ,а вот если создать рисунок ,то глючит .
код решения:
Graphics 800,600,32,2 
ssd2 = LoadImage ("C:\Program Files\Blitz3D\Samples\Blitz 2D Samples\Stone2.bmp")

ssd=CreateImage(32,32) 
SetBuffer ImageBuffer(ssd) 
Color 0,0,155
Oval 15-10,15-10,20,20,1
SetBuffer BackBuffer() 


q#=0.5

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(ssd2 ,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 )
			
		If r2 = 0 Or g2=0 Or b2=0 Then 
		r2 = r1 : g2 = g1 : b2 = b1
		EndIf
		;	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
(Offline)
 
Ответить с цитированием