effet transparence simpa
Publié : jeu. 17/janv./2008 21:02
voila je suis tomber sur un code de je ne sais plus qui
. un peut modifier et voici le resultat ma foie fort simpatique
.
@++


Code : Tout sélectionner
Structure APIC
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; (BBL V0.08)
; Structure permettant de gérer un BitMap créé par l'API pointé par ABmp
; et d'y accéder grâce l'imageID
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ID.L ; ID de l'image
pBmp.L ; (Pointeur 32 bits) Pointeur d'accès direct à l'image
W.L ; Largeur de l'image
H.L ; Hauteur de l'image
EndStructure
Macro Argb(A, R, G, B)
((((A << 24) + (R << 16) ) + (G << 8) ) + B)
EndMacro
Procedure DrawLocate(*Buffer.APIC, x.L, y.L)
With *Buffer
*Adr = \pBmp + (((y * \W) + x) * 4)
EndWith
ProcedureReturn *Adr
EndProcedure
Procedure CreateAlphaImage(*Buffer.APIC, W.L, H.L)
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; (BBL V0.08)
; Crée une zone mémoire pour l'édition d'une image Alpha
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Entrées *H (Structure ADESS)
; ¯¯¯¯¯¯¯ W (LONG) Largeur de l'image
; H (LONG) Hauteur de l'image
;
; Sortie Le buffer est modifié notamment le pointeur d'accès direct à
; ¯¯¯¯¯¯ l'image pBmp
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
With *Buffer
\W = W
\H = H
\pBmp = AllocateMemory((\W * \H) << 2)
EndWith
EndProcedure
Procedure CatchAlphaImage(*Buffer.APIC)
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; (BBL V0.08)
; Crée une image Alpha de 32 bits de profondeur à partir d'une zone mémoire
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Entrée Adresse pointant sur l'image
; ¯¯¯¯¯¯
; Sortie Retourne le handle de l'image (= ImageID)
; ¯¯¯¯¯¯
; Remarque >> Cette fonction s'exécute APRES CreateAlphaImage()
; ¯¯¯¯¯¯¯¯
;____________________________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
With *Buffer
\ID = CreateBitmap_(\W, \H, 1, 32, \pBmp)
EndWith
EndProcedure
Procedure InitPlugIn()
UseJPEGImageDecoder()
UsePNGImageDecoder()
InitSprite()
InitMouse()
InitKeyboard()
EndProcedure
Procedure InitDatas()
LoadImage(0,Left(GetHomeDirectory(), 1) + ":\Windows\Web\Wallpaper\Fond d'écran.bmp")
EndProcedure
Procedure InitDisplay(W.L, H.L)
ExamineDesktops()
OpenWindow(0, 0, 0, DesktopWidth(0), DesktopHeight(0), "teste", #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0), 0, 0, DesktopWidth(0), DesktopHeight(0), 0, 0, 0)
FlipBuffers()
EndProcedure
Procedure Init(X.L, Y.L)
InitPlugIn()
InitDisplay(X, Y)
InitDatas()
EndProcedure
Procedure Main(W.L, H.L, Size.L)
Init(W, H)
Sombre.APIC
CreateAlphaImage(Sombre, Size, Size)
For y = 0 To Size - 1
For x = 0 To Size - 1
dx = x - Size >> 1
dy = y - Size >> 1
dx * dx
dy * dy
Dist.F = Sqr(dx + dy)
Dist = (Dist * 255.0) / (Size / 2.0)
If (Dist <= 0.0): Dist = 1: EndIf
If (Dist > 255.0): Dist = 255: EndIf
C.L = Dist
C & $FF
C << 24
PokeL(DrawLocate(Sombre, x, y), C)
Next
PokeL(DrawLocate(Sombre, Size / 2, y), $FF000000)
Next
For x = 0 To Size - 1
PokeL(DrawLocate(Sombre, x, Size / 2), $FF000000)
Next
CatchAlphaImage(Sombre)
Repeat
AMx = Mx
AMy = My
ExamineMouse()
Mx = MouseX()
My = MouseY()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If (AMx <> Mx) Or (AMy <> My)
GrabImage(0, 1, Mx, My, Size, Size)
StartDrawing(ScreenOutput())
Box(AMx, AMy, Size, Size, #Black)
DrawImage(ImageID(1), Mx, My)
DrawAlphaImage(Sombre\ID, Mx, My)
StopDrawing()
FlipBuffers()
EndIf
Event = WindowEvent()
Delay(5)
Until Event = #PB_Event_CloseWindow
EndProcedure
Main(800, 500, 400)
@++