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

Очередное извращение на тему прозрачности
;time=CreateTimer(240)
Const numImage =10


Graphics 800,600,32,2 

v=1

ssd=CreateImage(31,31) 
SetBuffer ImageBuffer(ssd) 
Color 0,255,0
Rect 0,0,31,31,1
Color 0,0,155
Oval 14-10,14-10,20,20,1
SetBuffer BackBuffer() 

t= 5*35
While Not KeyHit(1) 
Cls 


Color 255,0,0
Rect 0,0,t,t,1

Color 0,255,0
Rect 0,t,t,t,1
Color 0,0,255
Rect t,0,t,t,1
Color 255,255,255
Rect t,t,t,t,1

	 

;WaitTimer(time)	
For b=0 To numImage 
	For a=0 To numImage 
		DrawAlhaImage(ssd ,a*35,b*35,(a*b) Mod 101)
		DrawAlhaImage(ssd ,395+a*35,b*35,(a*b) Mod 101)
Next:Next 



Color 255,255,255
Text 700,40 , q
Flip 
Wend 
;FreeTimer time
End 

Function DrawAlhaImage(Image%,XP%,YP%,opasity%=1)

	W = ImageWidth(Image)
	H = ImageHeight(Image)
	
	LockBuffer ImageBuffer(Image)
	LockBuffer BackBuffer() 
	For x = 0 To W - 1
		For y = 0 To H - 1
		XPX =XP+X : YPY = YP+Y
			If x>0 And x<800 And y>0 And y<600 And xpx>0 And xpx<800 And ypy>0 And ypy<600
			Background= ReadPixelFast(XPX,YPY,BackBuffer() ) 
			Foreground= ReadPixelFast(X,Y,ImageBuffer(Image)) 
			WritePixelFast XPX,YPY, GetPixelForOpacity( Background, Foreground, opasity)
			EndIf 
		Next
	Next
	
	UnlockBuffer ImageBuffer(Image)
	UnlockBuffer BackBuffer() 	
End Function

; pixelCanvasAlpha = 0 убирает черныйе пикселы , pixelCanvasAlpha от 1 до 100 (100 полностью прозрачно)
Function GetPixelForOpacity( pixelBackground, pixelForeground, pixelCanvasAlpha)
 if pixelForeground = $FF000000 then pixelForeground = pixelBackground
        Return (255 Shl 24 Or ( ((pixelBackground And $00FF0000) Shr 16) * pixelCanvasAlpha/101 + ((pixelForeground And $00FF0000) Shr 16)* ( 100-pixelCanvasAlpha)/101) Shl 16 Or  (((pixelBackground And $0000FF00) Shr 8) * pixelCanvasAlpha/101 +  ((pixelForeground And $0000FF00) Shr 8)* (100- pixelCanvasAlpha)/101)Shl 8 Or (((pixelBackground And $000000FF))* pixelCanvasAlpha/101 +  ((pixelForeground And $000000FF))* (100- pixelCanvasAlpha)/101));
End Function
__________________
Мой проект здесь

Последний раз редактировалось polopok, 06.06.2014 в 16:55. Причина: дополнение
(Offline)
 
Ответить с цитированием