Postez vos codes disjonctés ici !!! :)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Super cool.
Parfait la rotation 8)

L'arrivée de l'image à la fin est un tout petit peu brutale, mais c'est tres bien.
Tu sais ce que c'est les mecs qui savent rien faire, non seulement ils ne pondent rien, mais en plus ils sont jamais contents :lol:

Merci de ta modif 8)
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

Tu sais ce que c'est les mecs qui savent rien faire
et bien je ne pense pas savoir faire beaucoup la j'ai juste repris l'exemple qu'on a dans l'aide et je l'est un peut retravailler mais si non je ne serais pas faire sa du debu a la fin de tete :wink: .
si non merci.
L'arrivée de l'image à la fin est un tout petit peu brutale
que veut tu dire ?

nouvelle modification :wink: la fenetre s'arrete droite :wink:

Code : Tout sélectionner

Procedure appuie()
  #Desk = #True
  If #Desk = #True
    keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
  EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
  Ecran_Largeur = DesktopWidth(0)
  Ecran_Hauteur = DesktopHeight(0)
  ProfondeurCouleur = DesktopDepth(0)
Else
  End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000) ; <----on copie l'image qui est dans le dossier temporaire
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP) ; <---on la colle ou on veut :)

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
  End
EndIf

If OpenScreen(Ecran_Largeur, Ecran_Hauteur, ProfondeurCouleur, "Sprite")

  ; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
  ;
  LoadSprite(0, "c:/Screenshoot.bmp", #PB_Sprite_Texture)
  CreateSprite3D(1, 0)
  Sprite3DQuality(0)
 
  TransparentSpriteColor(0, RGB(255, 0, 255)) ; Our pink is transparent :)

  Repeat
   
    ; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
   
    FlipBuffers()
   
    ClearScreen(RGB(0,0,0))
   
    ; Draw our sprite
    ;
    If Start3D()
      ZoomSprite3D(1, x, x)
      RotateSprite3D(1, 2, 1)
      DisplaySprite3D  (1, 0, 0, 255)
     
      Stop3D()
    EndIf
   
    ExamineKeyboard()
   
    x+1
  Until x > 900 Or KeyboardPushed(#PB_Key_Escape)
  Delay(500)
  ClearScreen(RGB(0,0,50))
 
Else
  MessageRequester("Error", "Can't open a 800*600 - 16 bit screen !", 0)
EndIf

End 

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

J'ajoute ma pierre à l'édifice :)

Code : Tout sélectionner

; Matrice de Sprite 3D

; ***
; Ce n'est pas de moi, je l'ai récupéré dans l'un des codes du Dr. Dri
Structure D3DTLVERTEX
  sx.f
  sy.f
  sz.f
  rhw.f
  color.l
  specular.l
  tu.f
  tv.f
EndStructure

Structure PB_Sprite3D
  *Texture.IDirectDrawSurface7
  Vertice.D3DTLVERTEX[4]
  Width.w
  Height.w
EndStructure
; ***

Structure Surface
  SPR.l
  *SPR3D.PB_Sprite3D
EndStructure

; Paramètres
#MAX_Steps = 32 ; soit #MAX_Steps * #MAX_Steps sprites, perso ça comment à ramer à partier de 96
#Dist_Strength = 6.5 ; Force du decalage
#Ang_Strength = 4.5 ; Force des angles

Global Dim Surfaces.Surface(#MAX_Steps, #MAX_Steps)
Dim Vertices.D3DTLVERTEX(#MAX_Steps, #MAX_Steps)

Procedure.f SetVerticePos(vx.l, vy.l, x.f, y.f)

  Surfaces(vx, vy)\SPR3D = IsSprite3D(Surfaces(vx, vy)\SPR)
  Surfaces(vx, vy)\SPR3D\Vertice[0]\sx = x
  Surfaces(vx, vy)\SPR3D\Vertice[0]\sy = y

  If vx > 0
    Surfaces(vx-1, vy)\SPR3D = IsSprite3D(Surfaces(vx-1, vy)\SPR)
    Surfaces(vx-1, vy)\SPR3D\Vertice[1]\sx = x
    Surfaces(vx-1, vy)\SPR3D\Vertice[1]\sy = y
  EndIf
  
  If vx > 0 And vy > 0
    Surfaces(vx-1, vy-1)\SPR3D = IsSprite3D(Surfaces(vx-1, vy-1)\SPR)
    Surfaces(vx-1, vy-1)\SPR3D\Vertice[3]\sx = x
    Surfaces(vx-1, vy-1)\SPR3D\Vertice[3]\sy = y
  EndIf
  
  If vy > 0
    Surfaces(vx, vy-1)\SPR3D = IsSprite3D(Surfaces(vx, vy-1)\SPR)
    Surfaces(vx, vy-1)\SPR3D\Vertice[2]\sx = x
    Surfaces(vx, vy-1)\SPR3D\Vertice[2]\sy = y
  EndIf

EndProcedure

InitSprite()
InitSprite3D()
InitKeyboard()

ScreenWidth  = GetSystemMetrics_(#SM_CXSCREEN)
ScreenHeight = GetSystemMetrics_(#SM_CYSCREEN)

OpenWindow(0, 0, 0, ScreenWidth, ScreenHeight, "Test", #PB_Window_Invisible | #PB_Window_BorderLess)
  OpenWindowedScreen(WindowID(0), 0, 0, ScreenWidth, ScreenHeight, 1, 0, 0)
  
  CreateSprite(0, ScreenWidth, ScreenHeight)
  
  hDC = GetDC_(#Null)
  hSurface = StartDrawing(SpriteOutput(0))
    BitBlt_(hSurface, 0, 0, ScreenWidth, ScreenHeight, hDC, 0, 0, #SRCCOPY)
  StopDrawing()
  ReleaseDC_(#Null, hDC)
  
  UseBuffer(0)
  nSPR = 1
  StepX.f = ScreenWidth  / #MAX_Steps
  StepY.f = ScreenHeight / #MAX_Steps
  
  For y = 0 To #MAX_Steps ;- 1
    For x = 0 To #MAX_Steps ;- 1
      
      Surfaces(x, y)\SPR = nSPR
      If GrabSprite(nSPR, x * StepX, y * StepY, StepX, StepY, #PB_Sprite_Texture) = 0
        CreateSprite(nSPR, StepX, StepY, #PB_Sprite_Texture)
      EndIf
      Surfaces(x, y)\SPR3D = CreateSprite3D(nSPR, nSPR)
      
      nSPR + 1
    
    Next
  Next
  
  ax.f = 0
  ay.f = 0

  HideWindow(0, 0)
  Repeat
    
    ExamineKeyboard()
    
    ClearScreen(0)
    
    
    ax = WindowMouseX(0) / ScreenWidth * #PI
      
    
    Start3D()
      
      For y = 0 To #MAX_Steps
        
        For x = 0 To #MAX_Steps
          
          
          
          SetVerticePos(x, y, x * StepX + (x - #MAX_Steps /2 ) * #Ang_Strength * Cos(ax) - (x - #MAX_Steps /2) * #Dist_Strength, y * StepY + (y - #MAX_Steps /2 ) * #Ang_Strength * Sin(ay) - (y - #MAX_Steps /2) * #Dist_Strength)
      
          DisplaySprite3D(Surfaces(x, y)\SPR, 0, 0, 255)
          
          ay + (#PI / #MAX_Steps)

        Next
        ax + (#PI / #MAX_Steps)
        ay = WindowMouseY(0) / ScreenHeight * #PI
      Next
    
    Stop3D()
    
    FlipBuffers()
    
  Until WindowEvent() = #WM_CLOSE Or KeyboardPushed(#PB_Key_Escape)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@VENOM
Tu as bien compris ce que je voulais dire :wink:
A la fin quand la fenetre arrivait à son emplacement d'origine, y'avait un saut brutal.
Maintenant c'est corrigé.
Je vais faire ce que je sais le mieux faire, c'est à dire casse burne :D
Ce serait parfait de chez parfait si la fenetre avait sa taille réelle quand elle arrive à la fin, hors de ce que j'ai vu, elle est carré et il reste une bande noire à droite.
Mais c'est juste un avis, ne te casse pas la tete si tu n'a pas le temps :wink:
En tout cas encore bravo 8)

@CEDERAVIC
Genial aussi ton code, c'est une super idée ce POST, ça en fait un paquet d'effet qui pourrait servir :D
Ce serait de bon économiseur d'ecran mais pas de processeur apparement :D
En tout cas ça me plait drolement, merci.
Pour etre aussi chiant qu'avec VENOM, j'ai vu des léger traits noirs sur la fenetre quand on déplace la souris.
Mais ça viens peut etre de ma garte graphique ou du PC

Encore bravo à vous deux 8)
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

@cederavic
Génial ton code ! :D
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

super vos codes
du bon travail
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

@Kwai : oui je les ai aussi, je sait pas d'ou ça vient...
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

:P a ouai sa dechire ton code cederavic bien jouer :wink: .
Ce serait parfait de chez parfait si la fenetre avait sa taille réelle quand elle arrive à la fin, hors de ce que j'ai vu, elle est carré et il reste une bande noire à droite
oui j'ai vu sa mais je voie pas comment regler ce probleme :wink: .

fin si j'ai le temps je regarderais :wink: .



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

désolé Kwai chang caine je n'y arrive pas si quel'quin sais comment faire :wink: .

si non j'ai cette effet la qui ressemble beaucoup au 1er de Mytic :

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
  End
EndIf

Procedure appuie()
  #Desk = #True
  If #Desk = #True
    keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
  EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
  Ecran_Largeur = DesktopWidth(0)
  Ecran_Hauteur = DesktopHeight(0)
  ProfondeurCouleur = DesktopDepth(0)
Else
  End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(0, DC)
ResizeImage(0, 800, 600, #PB_Image_Smooth)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP)

If OpenScreen(800, 600, 16, "Sprite")

  LoadSprite(0, "c:/screenshoot.bmp", #PB_Sprite_Texture)
  CreateSprite3D(0, 0)
  CreateSprite3D(1, 0)

  
  Sprite3DQuality(1)
  
  TransparentSpriteColor(0, RGB(255, 0, 255))

  Repeat

    FlipBuffers()
    
    ClearScreen(RGB(0,0,0))

    If Start3D()
      DisplaySprite3D(0, 0, 0, 255)
     For a = 1 To 1000
      DisplaySprite3D(0, x*a, a, 255)
     Next
      
      Stop3D()
    EndIf
    
    ExamineKeyboard()
    
    x+1
  Until x > 850 Or KeyboardPushed(#PB_Key_Escape)
  
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf

End   


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@CEDERAVIC
@Kwai : oui je les ai aussi, je sait pas d'ou ça vient...
Bon, je vais retourner chercher mon pc dans la poubelle de l'immeuble avant demain matin 6h :D
En tout cas, ça fait rien, il est superbe quand meme ton drap de bain au vent :D
Merci 8)

@VENOM
oui j'ai vu sa mais je voie pas comment regler ce probleme .
fin si j'ai le temps je regarderais .
Te casse pas trop la tete, c'est deja super cool, peut etre que quelqu'un passera par la ....
En attendant j'ai épaté tout le monde au boulot avec ta fenetre girouette.
si non j'ai cette effet la qui ressemble beaucoup au 1er de Mytic :
Mais ou allez vous cherchez toutes ces idées 8O
Avec vos codes les processeurs sont pas à la bonne, mais par contre c'est un regal des yeux.
Sur le dernier l'image est un peu flou, je pense que ce doit etre normal.

Encore bravo.
Et merci à vous pour ce feu d'artifice virtuel :D
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

Sur le dernier l'image est un peu flou, je pense que ce doit etre normal.
je pense que oui car je n'est pas de fonction qui règle la qualité de l'image :wink: .

:P je m'eclate tout seul maintenant une rotation mais effect cube :P .

Code : Tout sélectionner

Procedure appuie()
  #Desk = #True
  If #Desk = #True
    keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
  EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
  Ecran_Largeur = DesktopWidth(0)
  Ecran_Hauteur = DesktopHeight(0)
  ProfondeurCouleur = DesktopDepth(0)
Else
  End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000) ; <----on copie l'image qui est dans le dossier temporaire
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP) ; <---on la colle ou on veut :)

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
  End
EndIf

If OpenScreen(Ecran_Largeur, Ecran_Hauteur, ProfondeurCouleur, "Sprite")

  ; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
  ;
  LoadSprite(0, "c:/Screenshoot.bmp", #PB_Sprite_Texture)
  CreateSprite3D(1, 0)
  Sprite3DQuality(0)
 
  TransparentSpriteColor(0, RGB(255, 0, 255)) ; Our pink is transparent :)

  Repeat
   
    ; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
   
    FlipBuffers()
   
    ClearScreen(RGB(0,0,0))
   
    ; Draw our sprite
    ;
    If Start3D()
     ZoomSprite3D(1, x, x)
      RotateSprite3D(1, 2, 1)
     For a = 1 To 12
      DisplaySprite3D  (1, a, a, 255) 
     Next 
      Stop3D()
    EndIf
   
    ExamineKeyboard()
   
    x+1
  Until x > 900 Or KeyboardPushed(#PB_Key_Escape)
  Delay(500)
  ClearScreen(RGB(0,0,50))
 
Else
  MessageRequester("Error", "Can't open a 800*600 - 16 bit screen !", 0)
EndIf

End
c'est exelent les sprites3d :D .



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Alors la le cube, ça plait moins à mon PC de boulot :cry:
Ce doit etre les angles qui lui font mal :D
ça saccade un peu, c'est moins fluide que le code précédent.
En tout cas y doit en faire des milliers de calculs le pauvre processeur.

Peut etre devrais tu mettre le chemin du screenshot en variable au debut du code, puis mettre un deletefile chemin de la variable, comme ça à la fin du code plus de trace de ton screenshot.bmp :wink:

Merci de ton travail
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

Peut etre devrais tu mettre le chemin du screenshot en variable au debut du code, puis mettre un deletefile chemin de la variable, comme ça à la fin du code plus de trace de ton screenshot.bmp
oui c'est sur j'ai meme pas eu le temps de metre sa :) merci pour l'info.


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Apparemment il faut changer quelque chose ligne 25, (cela a été fait dans une vieille version)désolé j'ai pas le temps de m'y pencher :(
Je compte sur vous pour débusquer l'embrouille :)
[resolu par Vénon] voir le prochain post ! Merci à lui :)

Code : Tout sélectionner

; Petit délire Pychadélique dont Dobro m'a dit qu'il avait un nom !
; "Les taches de Martin", moi je n'en savait rien, Pure hasard,  on nous cache tout !
; Grosso modo on fait une moyenne des couleurs autour d'un pixel considéré
; que l'on remet dans ce pixel et on recommence :)

#dobro=1    ; gestion des sprites aimablement expliquée par Dobro
#Police=1
#Sprite=1
spr=1
Dim ecran(640,480)
For x = 0 To 639 ; un écran de couleurs aléatoires
  For y = 0 To 479
    r=Random(255)
    g=Random(255)
    b=Random(255)   
    c=RGB(r,g,b)  ;Couleur du pixel
    ecran(x,y)= c
  Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = 600 ;=largeur de l'ecran
EcranY = 480;=hauteur de l'ecran
  WindowID = OpenWindow(1, 0, 0, 640, 480,  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "Move the mouse slowly in any direction :)")
 
  WindowID = WindowID(1)
  Result = OpenWindowedScreen(WindowID,0,0, 640, 480, 1, 0,0)
  CreateSprite(1, 640, 480)  ; cree 1 sprites qui sert d'ecran 1
  CreateSprite(2, 640, 480)  ;  cree 1 sprites qui sert d'ecran 2   
 
  Repeat  ;Boucle principale

  Event=WindowEvent()
 
  GetCursorPos_(CursorPos.POINT)    ; position de la souris
  MouseX = CursorPos\x
  MouseY = CursorPos\y
   
 If xt <> MouseX  ; test pour influer la variable m (la moyenne)
  If xt> MouseX
    m = m-1
  Else
    m = m+1
  EndIf
  EndIf 
  If yt <> MouseY ; test pour influer la variable s (le seuil)
  If yt> MouseY
     s = s-1
  Else
  s = s+1
  EndIf
 EndIf   

  xt=MouseX  ;   on met en la position de la souris en tampon
  yt= MouseY ;
 
      StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
      ; trace à l'ecran et test pour avoir une image "torique"
      For x = 1 To 638 ; lignes intérieures
              For y = 1 To 478   ;genre de moyenne de couleur autour du pixel considéré
          c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
          Gosub t_race         
        Next y
      Next x     
 
      For x = 1 To 638 ;ligne x 0
          c=ecran(x-1,0) + ecran(x+1,0) + ecran(x,1) + ecran(x,479)
          y=0
         Gosub t_race         
      Next x
      For x = 1 To 638 ;ligne x 479
          c=ecran(x-1,479) + ecran(x+1,479) + ecran(x,1) + ecran(x,478)
          y=479
         Gosub t_race         
      Next x
      For y = 1 To 478 ;colonne 0 y
          c=ecran(639,y) + ecran(1,y) + ecran(0,y-1) + ecran(0,y+1)
          x= 0
         Gosub t_race         
      Next y
      For y = 1 To 478 ;colonne 639 y
          c=ecran(638,y) + ecran(0,y) + ecran(639,y-1) + ecran(639,y+1)
          x= 639
         Gosub t_race         
      Next y
;Les 4 coins
         c=ecran(639,0) + ecran(1,0) + ecran(0,479) + ecran(0,1)
          x=0
          y=0
          Gosub t_race
         c=ecran(639,479) + ecran(1,479) + ecran(0,478) + ecran(0,0)
          x=0
          y=479
          Gosub t_race
        c=ecran(638,0) + ecran(0,0) + ecran(639,479) + ecran(639,1)
          x=639
          y=0
          Gosub t_race
         c=ecran(638,479) + ecran(0,479) + ecran(639,478) + ecran(639,0)
          x=639
          y=479
          Gosub t_race
     
    StopDrawing()
    spr=spr+1
    If spr>2
      spr=1
    EndIf
     
    DisplaySprite(spr, 0, 0)     
   
    FlipBuffers():; affiche l'ecran
    ClearScreen(0, 0, 0) :;efface l'ecran
   
  Until Event=#PB_Event_CloseWindow
  End
       
  t_race :
  If m <4 ; test d'un genre de moyenne de couleur autour du pixel considéré
          m = 4
        EndIf
        If m>40  ; moyenne haute fixée arbitrairement
          m=20
        EndIf
        If s <0   ; seuil de valeur de couleurs défini arbitrairement
          s = 1
        EndIf
        If s>10000
          s=10000
        EndIf
   ; c est la couleur finale du pixel     
        c=c/m   ;Genre de moyenne de couleurs des 4 voisins du pixel considéré
          ; s est le seuil
          ;C'est la moyenne et le seuil qui déterminent ces genres d'images totalement différentes!
          If c<s
            c=RGB(125,125,125)       ;Si la  moyenne de couleurs dépasse un seuil on la normalise   
          EndIf
          ecran(x,y)=c  ; nouvelle couleur dans un tableau de l'image
          Plot(x,y,c) ; on affiche le pixel avec la nouvelle couleur
         Return
Dernière modification par Frenchy Pilou le jeu. 04/oct./2007 22:42, modifié 1 fois.
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

voila :wink:

Code : Tout sélectionner

; Petit délire Pychadélique dont Dobro m'a dit qu'il avait un nom !
; "Les taches de Martin", moi je n'en savait rien, Pure hasard,  on nous cache tout !
; Grosso modo on fait une moyenne des couleurs autour d'un pixel considéré
; que l'on remet dans ce pixel et on recommence :)

#dobro=1    ; gestion des sprites aimablement expliquée par Dobro
#Police=1
#Sprite=1
spr=1
Dim ecran(640,480)
For x = 0 To 639 ; un écran de couleurs aléatoires
  For y = 0 To 479
    r=Random(255)
    g=Random(255)
    b=Random(255)   
    c=RGB(r,g,b)  ;Couleur du pixel
    ecran(x,y)= c
  Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = 600 ;=largeur de l'ecran
EcranY = 480;=hauteur de l'ecran
  WindowID = OpenWindow(1, 0, 0, 640, 480, "Move the mouse slowly in any direction :)",  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
 
  WindowID = WindowID(1)
  Result = OpenWindowedScreen(WindowID,0,0, 640, 480, 1, 0,0)
  CreateSprite(1, 640, 480)  ; cree 1 sprites qui sert d'ecran 1
  CreateSprite(2, 640, 480)  ;  cree 1 sprites qui sert d'ecran 2   
 
  Repeat  ;Boucle principale

  Event=WindowEvent()
 
  GetCursorPos_(CursorPos.POINT)    ; position de la souris
  MouseX = CursorPos\x
  MouseY = CursorPos\y
   
 If xt <> MouseX  ; test pour influer la variable m (la moyenne)
  If xt> MouseX
    m = m-1
  Else
    m = m+1
  EndIf
  EndIf
  If yt <> MouseY ; test pour influer la variable s (le seuil)
  If yt> MouseY
     s = s-1
  Else
  s = s+1
  EndIf
 EndIf   

  xt=MouseX  ;   on met en la position de la souris en tampon
  yt= MouseY ;
 
      StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
      ; trace à l'ecran et test pour avoir une image "torique"
      For x = 1 To 638 ; lignes intérieures
              For y = 1 To 478   ;genre de moyenne de couleur autour du pixel considéré
          c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
          Gosub t_race         
        Next y
      Next x     
 
      For x = 1 To 638 ;ligne x 0
          c=ecran(x-1,0) + ecran(x+1,0) + ecran(x,1) + ecran(x,479)
          y=0
         Gosub t_race         
      Next x
      For x = 1 To 638 ;ligne x 479
          c=ecran(x-1,479) + ecran(x+1,479) + ecran(x,1) + ecran(x,478)
          y=479
         Gosub t_race         
      Next x
      For y = 1 To 478 ;colonne 0 y
          c=ecran(639,y) + ecran(1,y) + ecran(0,y-1) + ecran(0,y+1)
          x= 0
         Gosub t_race         
      Next y
      For y = 1 To 478 ;colonne 639 y
          c=ecran(638,y) + ecran(0,y) + ecran(639,y-1) + ecran(639,y+1)
          x= 639
         Gosub t_race         
      Next y
;Les 4 coins
         c=ecran(639,0) + ecran(1,0) + ecran(0,479) + ecran(0,1)
          x=0
          y=0
          Gosub t_race
         c=ecran(639,479) + ecran(1,479) + ecran(0,478) + ecran(0,0)
          x=0
          y=479
          Gosub t_race
        c=ecran(638,0) + ecran(0,0) + ecran(639,479) + ecran(639,1)
          x=639
          y=0
          Gosub t_race
         c=ecran(638,479) + ecran(0,479) + ecran(639,478) + ecran(639,0)
          x=639
          y=479
          Gosub t_race
     
    StopDrawing()
    spr=spr+1
    If spr>2
      spr=1
    EndIf
     
    DisplaySprite(spr, 0, 0)     
   
    FlipBuffers():; affiche l'ecran
    ClearScreen(RGB(0, 0, 0)) :;efface l'ecran
   
  Until Event=#PB_Event_CloseWindow
  End
       
  t_race :
  If m <4 ; test d'un genre de moyenne de couleur autour du pixel considéré
          m = 4
        EndIf
        If m>40  ; moyenne haute fixée arbitrairement
          m=20
        EndIf
        If s <0   ; seuil de valeur de couleurs défini arbitrairement
          s = 1
        EndIf
        If s>10000
          s=10000
        EndIf
   ; c est la couleur finale du pixel     
        c=c/m   ;Genre de moyenne de couleurs des 4 voisins du pixel considéré
          ; s est le seuil
          ;C'est la moyenne et le seuil qui déterminent ces genres d'images totalement différentes!
          If c<s
            c=RGB(125,125,125)       ;Si la  moyenne de couleurs dépasse un seuil on la normalise   
          EndIf
          ecran(x,y)=c  ; nouvelle couleur dans un tableau de l'image
          Plot(x,y,c) ; on affiche le pixel avec la nouvelle couleur
         Return


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre