Показать сообщение отдельно
Старый 27.10.2012, 12:22   #1
polopok
ПроЭктировщик
 
Регистрация: 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
(Offline)
 
Ответить с цитированием