Ecran matraqué

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Ecran matraqué

Message par kelly »

Utilisez une image 1280*1024 en jpg en c:/01.jpg

Code : Tout sélectionner

InitSprite()   
InitSprite3D() 
InitMouse()
InitKeyboard() 
UseJPEGImageDecoder() 

OpenScreen(1280, 1024,32,"")
LoadSprite(0,"c:/01.jpg")
DisplaySprite(0,0,0)
FlipBuffers()
DisplaySprite(0,0,0)
FlipBuffers()
Dim p(1280*2,1024*2)
StartDrawing(ScreenOutput())
For i=0 To 1280
For u=0 To 1024
p(640+i,512+u)=Point(i,u)
Next
Next
StopDrawing()
FreeSprite(0)

gro=250
Dim zoom0.f(gro)
Dim trans(gro)

zoom0(0)=0
gro2.f=0.5
For i=0 To gro
zoom0(i)=gro2
trans(i)=gro
gro2-0.0020
Next

Dim zx(gro,gro)
Dim zy(gro,gro)
For i=0 To gro
For u=0 To gro
x0=Sqr(i*i+u*u)
If x0<=gro
zx(i,u)=i*(1+zoom0(x0))
zy(i,u)=u*(1+zoom0(x0))
Else
If trans(i)=gro
trans(i)=u-1
EndIf
EndIf
Next
Next

Repeat
xx=Random(1280)
yy=Random(1024)

For u=1 To gro
For i=1 To trans(u)
zz.f=1+(251-Sqr(i*i+u*u))/240
c=p(639+xx+zx(i,u),511+yy+zy(i,u))
rr=Red(c)/zz
vv=Green(c)/zz
bb=Blue(c)/zz
c=RGB(rr,vv,bb)
P(639+xx+i,511+yy+u)=c
c=p(640+xx-zx(i,u),512+yy-zy(i,u))
rr=Red(c)/zz
vv=Green(c)/zz
bb=Blue(c)/zz
c=RGB(rr,vv,bb)
P(640+xx-i,512+yy-u)=c
c=p(640+xx-zx(i,u),511+yy+zy(i,u))
rr=Red(c)/zz
vv=Green(c)/zz
bb=Blue(c)/zz
c=RGB(rr,vv,bb)
P(640+xx-i,511+yy+u)=c
c=p(639+xx+zx(i,u),512+yy-zy(i,u))
rr=Red(c)/zz
vv=Green(c)/zz
bb=Blue(c)/zz
c=RGB(rr,vv,bb)
P(639+xx+i,512+yy-u)=c
Next
Next
StartDrawing(ScreenOutput())
For i=0 To 1279
For u=0 To 1023
Plot (i,u,p(640+i,512+u))
Next
Next
StopDrawing()
FlipBuffers() 

ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

ou bien :

Code : Tout sélectionner

InitSprite()   
InitSprite3D() 
InitMouse()
InitKeyboard() 
UseJPEGImageDecoder() 

OpenScreen(1280, 1024,32,"")
LoadSprite(0,"c:/01.jpg")
DisplaySprite(0,0,0)
FlipBuffers()
DisplaySprite(0,0,0)
FlipBuffers()
Dim p(1280*2,1024*2)
StartDrawing(ScreenOutput())
For i=0 To 1280
For u=0 To 1024
p(640+i,512+u)=Point(i,u)
Next
Next
StopDrawing()
FreeSprite(0)

gro=150
Dim zoom0.f(gro)
Dim trans(gro)

zoom0(0)=0
gro2.f=0.15
For i=0 To gro
zoom0(i)=gro2
trans(i)=gro
gro2-0.001
Next

Dim zx(gro,gro)
Dim zy(gro,gro)
For i=0 To gro
For u=0 To gro
x0=Sqr(i*i+u*u)
If x0<=gro
zx(i,u)=i*(1+zoom0(x0))
zy(i,u)=u*(1+zoom0(x0))
Else
If trans(i)=gro
trans(i)=u-1
EndIf
EndIf
Next
Next

Repeat
xx=Random(1280)
yy=Random(1024)

For u=1 To gro
For i=1 To trans(u)
c=p(639+xx+zx(i,u),511+yy+zy(i,u))
P(639+xx+i,511+yy+u)=c
c=p(640+xx-zx(i,u),512+yy-zy(i,u))
P(640+xx-i,512+yy-u)=c
c=p(640+xx-zx(i,u),511+yy+zy(i,u))
P(640+xx-i,511+yy+u)=c
c=p(639+xx+zx(i,u),512+yy-zy(i,u))
P(639+xx+i,512+yy-u)=c
Next
Next
StartDrawing(ScreenOutput())
For i=0 To 1279
For u=0 To 1023
Plot (i,u,p(640+i,512+u))
Next
Next
StopDrawing()
FlipBuffers() 

ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
[/code]
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Ou des especes de fractales tirés de l'image (mon preferé):

Code : Tout sélectionner

InitSprite()   
InitSprite3D() 
InitMouse()
InitKeyboard() 
UseJPEGImageDecoder() 

OpenScreen(1280, 1024,32,"")
LoadSprite(0,"c:/01.jpg")
DisplaySprite(0,0,0)
FlipBuffers()
DisplaySprite(0,0,0)
FlipBuffers()
Dim p(1280*2,1024*2)
StartDrawing(ScreenOutput())
For i=0 To 1280
For u=0 To 1024
p(640+i,512+u)=Point(i,u)
Next
Next
StopDrawing()
FreeSprite(0)

gro=250
Dim zoom0.f(gro)
Dim trans(gro)

zoom0(0)=0
gro2.f=0.80
For i=0 To gro
zoom0(i)=gro2
trans(i)=gro
gro2-0.002
Next

Dim zx(gro,gro)
Dim zy(gro,gro)
For i=0 To gro
For u=0 To gro
x0=Sqr(i*i+u*u)
If x0<=gro
zx(i,u)=i*(1+zoom0(x0))
zy(i,u)=u*(1+zoom0(x0))
Else
If trans(i)=gro
trans(i)=u-1
EndIf
EndIf
Next
Next

Repeat
xx=Random(1280)
yy=Random(1024)

For u=1 To gro
For i=1 To trans(u)
c=p(639+xx+zx(i,u),511+yy+zy(i,u))
P(639+xx+i,511+yy+u)=c
c=p(640+xx-zx(i,u),512+yy-zy(i,u))
P(640+xx-i,512+yy-u)=c
c=p(640+xx-zx(i,u),511+yy+zy(i,u))
P(640+xx-i,511+yy+u)=c
c=p(639+xx+zx(i,u),512+yy-zy(i,u))
P(639+xx+i,512+yy-u)=c
Next
Next
StartDrawing(ScreenOutput())
For i=0 To 1279
For u=0 To 1023
Plot (i,u,p(640+i,512+u))
Next
Next
StopDrawing()
FlipBuffers() 

ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Amusant!
J'ai l'impression d'avoir déjà vu ça quelque part :)

Faudrait que tu participes au concours : http://leonard.oxg.free.fr/record16/record16.html
;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

super ! :D

jai fait une modif sur le deuxieme listing
pour qu'il sadapte a la resolution en cours (moi je suis en 1024*768)

et pour qu'il utilise une copie d'ecran !!
y aurai pas grand chose a faire pour en faire un screen-saver :D

Code : Tout sélectionner

 InitSprite()   
InitSprite3D()
InitMouse()
InitKeyboard()
UseJPEGImageDecoder()
#CAPTUREBLT = $40000000
Ecran_Largeur = GetSystemMetrics_(#SM_CXSCREEN)
Ecran_Hauteur = GetSystemMetrics_(#SM_CYSCREEN)


Gosub capture_ecran

OpenScreen(Ecran_Largeur, Ecran_Hauteur,32,"")
LoadSprite(0,"ecran.bmp")



DisplaySprite(0,0,0)
FlipBuffers()
DisplaySprite(0,0,0)
FlipBuffers()
Dim p(Ecran_Largeur*2,Ecran_Hauteur*2)
StartDrawing(ScreenOutput())
For i=0 To Ecran_Largeur
  For u=0 To Ecran_Hauteur
    p(640+i,512+u)=Point(i,u)
  Next
Next
StopDrawing()
FreeSprite(0)

gro=150
Dim zoom0.f(gro)
Dim trans(gro)

zoom0(0)=0
gro2.f=0.15
For i=0 To gro
  zoom0(i)=gro2
  trans(i)=gro
  gro2-0.001
Next

Dim zx(gro,gro)
Dim zy(gro,gro)
For i=0 To gro
  For u=0 To gro
    x0=Sqr(i*i+u*u)
    If x0<=gro
      zx(i,u)=i*(1+zoom0(x0))
      zy(i,u)=u*(1+zoom0(x0))
    Else
      If trans(i)=gro
        trans(i)=u-1
      EndIf
    EndIf
  Next
Next

Repeat
  xx=Random(Ecran_Largeur)
  yy=Random(Ecran_Hauteur)
  
  For u=1 To gro
    For i=1 To trans(u)
      c=p(639+xx+zx(i,u),511+yy+zy(i,u))
      p(639+xx+i,511+yy+u)=c
      c=p(640+xx-zx(i,u),512+yy-zy(i,u))
      p(640+xx-i,512+yy-u)=c
      c=p(640+xx-zx(i,u),511+yy+zy(i,u))
      p(640+xx-i,511+yy+u)=c
      c=p(639+xx+zx(i,u),512+yy-zy(i,u))
      p(639+xx+i,512+yy-u)=c
    Next
  Next
  StartDrawing(ScreenOutput())
  For i=0 To Ecran_Largeur-1
    For u=0 To Ecran_Hauteur-1
      Plot (i,u,p(640+i,512+u))
    Next
  Next
  StopDrawing()
  FlipBuffers()
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
ForEver


capture_ecran:

DC = GetDC_(0)
CreateImage(8, Ecran_Largeur, Ecran_Hauteur)
UseImage(8)
dessin = StartDrawing(ImageOutput())
BitBlt_(dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT|#CAPTUREBLT)
; pour n'avoir que le fond sans les fenetre retirer le  #CAPTUREBLT
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(8, "ecran.bmp")
Delay(2000)
Return

Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon j'ai repris le code de kelly et en lui ajoutant la capture d'ecran et
l'adaptation a la resolution en cours , je me suis permis d'en faire un
Screen saver tout simple
il faut le compiller en "deformation.scr"


a copier dans C:\WINDOWS\system32\
sous le nom de deformation.scr

ensuite vous avez acces au screen saver comme d'habitude !

il est a noter que j'ai mis une signature en bas de l'ecran !
il suffit dans les parametre du screensaver d'entrer
"kelly" , pour voir disparaitre le marquage ...
la petite fenetre n'est pas muni de bouton "ok" , il suffis de la quitter
par la croix , pour que le fichier "deformation.ini" soit modifié
ça peut rammer un peut l'orsqu'on quitte cette petite fenetre ! ..
pour voir l'effet il faut attendre bien 3 secondes ....


voici le code : :D

Code : Tout sélectionner

; 
; ici les initialisations des variables et tableaux 
;"/s" pour le lancer
;"/c:" + un nombre pour le faire Paramétrer
;"/p", espace, et un nombre qd son nom est simplement séletionné dans la boîte des propriétés du bureau
; "/p" , peut etre Preview ??
;Sinon, un truc tout con:
;Code:

;OpenConsole()
;p$=ProgramParameter()
;While p$
;    PrintN(p$)
;    p$=ProgramParameter()
;Wend
;Input()
 
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
    #code
    #Text_0
    #sprite
EndEnumeration
Procedure Open_Window_0()
    If OpenWindow(#Window_0, 293, 129, 249, 109,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "config")
        If CreateGadgetList(WindowID())
            StringGadget(#code, 40, 50, 170, 30, "", #PB_String_Password)
            TextGadget(#Text_0, 10, 20, 90, 20, "ENTREZ le Code")
        EndIf
    EndIf
EndProcedure




#Police=1
;*********** pour le screensaver
Param.s = Left(ProgramParameter(), 2)
If Param = "/p"
    End
EndIf

If Param = "/c" :;l'utilisateur veut paramettrer le screensaver !
    Open_Window_0():; jouvre ma fenetre ( cree a partir de visual designer)
    Repeat
        Texte$ = GetGadgetText(#code):;je recupere le contenu de ma boite de config
        If Texte$="kelly":;si le gars tappe le code "kelly"
            dobro=1:; c'est bon on affiche pas la surimpression
            code$="ok":;on se prepare a ecrire le mot "ok" dans un fichier
            Resultat = OpenFile(1, "deformation.ini") :;on cree le fichier
            WriteStringN(code$) :; on ecrit dedans "ok"
            CloseFile(1)
        Else
            dobro=0:; la le mec a pas rentré le bon code
        EndIf
    Until WindowEvent() = #PB_Event_CloseWindow :; le gars a fermé la boite de config
EndIf

GetCursorPos_(SourisOrigine.POINT)
ShowCursor_(0)

If ReadFile(1, "deformation.ini"):;en temps normal on commence par regarder si le screen saver est enregistré
    code$ = ReadString() :; on lit le contenu de "deformation.ini"
    CloseFile(1)
EndIf
 
If code$="ok":; bon le gars est enregistré
    dobro=1:; ce flag va retirer la surimpression
Else
    dobro=0:; il n'est pas enregistrer donc on affiche la surimpression
EndIf
;************ c'est tout pour le parametrage du screen saver



GetCursorPos_(SourisOrigine.POINT)
ShowCursor_(0)
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "system", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN)
EcranY = GetSystemMetrics_(#SM_CYSCREEN)
Ecran_Largeur=EcranX
Ecran_Hauteur=EcranY
#CAPTUREBLT = $40000000
Gosub capture_ecran

OpenWindow( #Window_1, 0, 0, EcranX, EcranY, #PB_Window_BorderLess , "Dos 3.10")
SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ; fenêtre toujours au premier plan
OpenWindowedScreen(WindowID(), 0, 0, EcranX, EcranY, 1, 0, 0)

; faire ici les initialisations du pre affichage
LoadSprite( #sprite,"ecran.bmp") 
  
  
  DisplaySprite(#sprite,0,0)
  FlipBuffers()
  
  Dim p(Ecran_Largeur*2,Ecran_Hauteur*2)
  StartDrawing(ScreenOutput())
  For i=0 To Ecran_Largeur
    For u=0 To Ecran_Hauteur
      p(640+i,512+u)=Point(i,u)
    Next
  Next
  DrawText(" En ROUTE")
  
  
  StopDrawing()
  FreeSprite( #sprite)
  
  gro=150
  Dim zoom0.f(gro)
  Dim trans(gro)
  
  zoom0(0)=0
  gro2.f=0.15
  For i=0 To gro
    zoom0(i)=gro2
    trans(i)=gro
    gro2-0.001
  Next
  
  Dim zx(gro,gro)
  Dim zy(gro,gro)
  For i=0 To gro
    For u=0 To gro
      x0=Sqr(i*i+u*u)
      If x0<=gro
        zx(i,u)=i*(1+zoom0(x0))
        zy(i,u)=u*(1+zoom0(x0))
      Else
        If trans(i)=gro
          trans(i)=u-1
        EndIf
      EndIf
    Next
  Next
  
  Repeat
    xx=Random(Ecran_Largeur)
    yy=Random(Ecran_Hauteur)
    
    For u=1 To gro
      For i=1 To trans(u)
        c=p(639+xx+zx(i,u),511+yy+zy(i,u))
        p(639+xx+i,511+yy+u)=c
        c=p(640+xx-zx(i,u),512+yy-zy(i,u))
        p(640+xx-i,512+yy-u)=c
        c=p(640+xx-zx(i,u),511+yy+zy(i,u))
        p(640+xx-i,511+yy+u)=c
        c=p(639+xx+zx(i,u),512+yy-zy(i,u))
        p(639+xx+i,512+yy-u)=c
      Next
    Next
    
    StartDrawing(ScreenOutput())
    For i=0 To Ecran_Largeur-1
      For u=0 To Ecran_Hauteur-1
        Plot (i,u,p(640+i,512+u))
      Next
    Next
    StopDrawing()
    
    If dobro=0
      ;**************** crée par Dobro **********************
      StartDrawing( ScreenOutput()) 
      BackColor(0,0,0):;couleur de fond noir
      FrontColor(0, 120, 0)
      Locate(EcranX-TextLength("Créé par Kelly et Dobro")-200, EcranY-45):;ceci pose le crayon au bon endroit (une ligne en dessous) comme indique plus haut
      DrawingFont(FontID):;attention on va ecrire du text sur la zone reserve du sprite
      DrawText("Créé par Kelly et Dobro"):; voila on le fait
      StopDrawing():
      ; ********************************************
    EndIf
    
    
    
    FlipBuffers()    
    GetCursorPos_(Souris.POINT):; test le curseur de la souris
Until WindowEvent() = #PB_Event_CloseWindow Or Souris\x <> SourisOrigine\x Or Souris\y <> SourisOrigine\y
ShowCursor_(1)
End


capture_ecran:
DC = GetDC_(0)
CreateImage(8, Ecran_Largeur, Ecran_Hauteur)
UseImage(8)
dessin = StartDrawing(ImageOutput())
BitBlt_(dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT|#CAPTUREBLT)
; pour n'avoir que le fond sans les fenetre retirer le  #CAPTUREBLT
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(8, "ecran.bmp")
Delay(2000)
Return

Répondre