Page 1 sur 1

effet transparence simpa

Publié : jeu. 17/janv./2008 21:02
par venom
voila je suis tomber sur un code de je ne sais plus qui :oops: . un peut modifier et voici le resultat ma foie fort simpatique :wink: .

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)

@++

Publié : ven. 18/janv./2008 11:37
par SpaceMan
Super ! :D
Mérite sa place dans Truc et astuce