Page 3 sur 4

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : sam. 03/mars/2012 17:33
par Ar-S
Oui je préfère cette version ;)

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : sam. 03/mars/2012 19:18
par graph100
C'est sympa là ;)

Mais par contre, ca commence à faire bcp de code pour chaque modif ^^
Tu peux faire un code dans le 1er post, et le mettre à jour à chaque modif, ca seras moins dur à lire ! mais fait toujours un post pour dire qu'il y a une maj

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : sam. 03/mars/2012 19:36
par GallyHC
graph100> c'est pas faut, je mettre maintenant a jour dans le poste principal et indiquere la mise a jour.

je me demande si une version horizontal serais bien ou pas. et deux eme question y a t'il une facon simple de faire une rotation a une image a 90°?

merci,
gallyhc

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : sam. 03/mars/2012 19:49
par graph100
J'ai testé de changer la valeur min du slider et il y a une légère erreur avec la molette, une mauvaise parenthèse.
Suit la correction :

Code : Tout sélectionner

Procedure.l DMXGadget_Event(event.l, evenp.l, eveng.l)
;
  Protected i.l
  Protected lMosY.l

  If event = #PB_Event_Gadget
    For i=1 To numDMXSlider
      If eveng = DMXSlider(i)\lCanva_01
        If DMXSlider(i)\disable = 0 Or DMXSlider(i)\actived = #False
          If evenp = #PB_EventType_MouseWheel
            DMXSlider(i)\value + (GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\WheelZoom) * DMXSlider(i)\pas
            If DMXSlider(i)\value < DMXSlider(i)\min
              DMXSlider(i)\value = DMXSlider(i)\min
            ElseIf DMXSlider(i)\value > DMXSlider(i)\max
              DMXSlider(i)\value = DMXSlider(i)\max
            EndIf
            
            DMXSlider(i)\state = (DMXSlider(i)\min - DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
            
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            ProcedureReturn DMXSlider(i)\gadget
          EndIf
          If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY) - (DMXSlider(i)\hb / 2)
            If lMosY < 0
              lMosY = 0
            EndIf
            
            If lMosY > DMXSlider(i)\h - DMXSlider(i)\hb
            	lMosY = DMXSlider(i)\h - DMXSlider(i)\hb
            EndIf
            
            DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
            
            DMXSlider(i)\state = lMosY
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            ProcedureReturn DMXSlider(i)\gadget
          EndIf
        EndIf
      EndIf
    Next i
  EndIf
  ProcedureReturn -1

EndProcedure

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : sam. 03/mars/2012 20:01
par GallyHC
Merci j'ai corriger je fais encore quelque modifs et je mettrais la mise a jour :)

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 14:24
par GallyHC
Bonjour tous,

Je me demander si il y a une methode simple pour faire une rotation d'une image a 90° pour faire un slider verttical aussi je ne sais pas si perso et dans mon soft de controle j'en aurais besoin mais cela pourrait etre utile un jour :)

Cordialement,
GallyHC

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 15:09
par Ar-S
Voilà une procédure d'Ollivier.

Code : Tout sélectionner

Procedure.I RotateImage2(Image.I) 
	Protected Result.I 
	Protected SourceLarg.I 
	Protected SourceHaut.I 
	Protected DestLarg.I 
	Protected DestHaut.I 
	SourceLarg = ImageWidth(Image) 
	SourceHaut = ImageHeight(Image) 
	DestLarg = SourceHaut 
	DestHaut = SourceLarg 
	Result = CreateImage(-1, DestLarg, DestHaut) 
	For Y = 0 To (SourceHaut - 1) 
    For X = 0 To (SourceLarg - 1) 
      StartDrawing(ImageOutput(Image) ) 
        C = Point(X, Y) 
      StopDrawing()     
      StartDrawing(ImageOutput(Result) ) 
        Plot(DestLarg - Y - 1, X, C) 
      StopDrawing()      
    Next X 
  Next Y 
	ProcedureReturn Result 
EndProcedure 

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 15:56
par Ar-S
Avec un exemple sans procédure.

Code : Tout sélectionner

UseJPEGImageDecoder()
UseJPEGImageEncoder()

Enumeration
  #S
  #D
EndEnumeration

Img = LoadImage(#S,  "F:\tonimage.jpg")
  
SourceLarg = ImageWidth(#S) 
SourceHaut = ImageHeight(#S) 
DestLarg = SourceHaut 
DestHaut = SourceLarg 

CreateImage(#D, DestLarg, DestHaut) 
For Y = 0 To (SourceHaut - 1) 
  For X = 0 To (SourceLarg - 1) 
    StartDrawing(ImageOutput(#S) ) 
      C = Point(X, Y) 
    StopDrawing()     
    StartDrawing(ImageOutput(#D) ) 
      Plot(DestLarg - Y - 1, X, C) 
    StopDrawing()      
  Next X 
Next Y 

	WW = ImageWidth(#D) 
	HH = ImageHeight(#D) 
	
  OpenWindow(0, 0, 0, WW, HH, "", $80000001) 
	ImageGadget(0, 0, 0, WW, HH, ImageID(#D)) 
	
  Repeat 
  Until WaitWindowEvent() = #PB_Event_Gadget 
	CloseWindow(0) 
	FreeImage(#S)  : FreeImage(#D) 

C'est très lent ! Lance le programme avec le debug et attends (plusieurs secondes pour une petite image !)
ton image s'affichera. il existe probablement des méthodes plus performantes mais j'ai pas trop le temps de chercher.

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 15:58
par GallyHC
Merci Ar-s> c'est deja plus ou moin ce que je pense mais je cherche une solution quand je disait simple j'aurais du dire "rapide" mais c'est deja une piste je vais refechier a cela. sinon ce serais de faire tout les calcul X et Y et inverce mais je ne sais pas si c une bonne ou mauvaise solution mais c'est ce que j'aurais fait en VB6 lol

Cordialement,
GallyHC

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 16:01
par Ar-S

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 21:09
par GallyHC
Comment te dire heuuuuuu, merci :)

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : lun. 05/mars/2012 23:10
par Le Soldat Inconnu
Tss pourquoi allez chez les anglais :mrgreen:

http://www.purebasic.fr/french/viewtopic.php?f=8&t=1237
Tu trouveras dans ma lib :
- Rotation d'image à 90, 180, 270°
- Rotation d'image avec l'angle que tu veux (et avec antialiasing)
- Symétrie d'image

Restons français ! :mrgreen:

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : mar. 06/mars/2012 1:03
par graph100
parfaitement d'accord LSI ;)

@GallyHC : dans mon include sur les gadgets, il y a avec l'imageEx Gadget une routine de rotation. Je l'ai modifiée pour une utilisation facile avec des images, regarde si tu veux ^^ (le code n'étais pas de moi, peut etre un mélange de LSI et d'un type du fofo anglais)

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : mer. 07/mars/2012 20:43
par GallyHC
Bonjour,

J'ai mis a jour avec une selection multiple des potars voir le premier post :)

Cordialement,
GallyHC

Re: Code du potar Slider, [Resolu] OpenWindow et molette

Publié : jeu. 08/mars/2012 0:37
par graph100
franchement tu me bluffe là ;) c'est génial comme fonction !
idée pour aller plus loin :

-> tu permets au programmateur de faire des groupes de potar différents : on peut faire plusieurs groupe de déplacement différent (et permet aussi de modifier la couleur du rectangle de sélection ;)

-> ajoute la touche alt par exemple pour faire des groupes à déplacement identique (ou bien à déplacement identique en % -> ils arrivent tous en haut en même temps qq soit leur position de départ). Je veux dire : lorsque tu ajoutes un potar au groupe avec alt : sa position n'est pas changé, mais lorsque tu bouges un potar du groupe, tous bougent avec un déplacement identique ;)

je pense que bien sur, les groupes ne devraient pas méler des Ctrl et des alt : ca devrait réinit le groupe.

gg !