FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par JL35 Hier à 16:25

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Rotation de bitmap

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Rotation de bitmap   Jeu 23 Fév 2017 - 16:40

Code:

rem ============================================================================
rem            Rotation de bitmap
rem ============================================================================
rem La procédure RotateImage() lit la valeur RGB du pixel en cours du 1er PICTURE,
rem échange les coordonnées X et Y puis affiche le pixel dans le second PICTURE
rem ============================================================================
dim x%, y%, RGB%, h%, w%, ret%, bmp$
width 0,800
bmp$ = "c:\users\acer\desktop\moto.bmp" : ' Choisir votre image
' Exemple pour une image de 366/225
' Pour d'autres dimensions, adapter w% et h%
w% = 366 : h% = 225
picture 10 : width 10,w% : height 10,h% : top 10,100 : left 10,100
picture 20 : width 20,h% : height 20,w% : top 20,10 : left 20,500

file_load 10,bmp$
caption 0,"Veuillez patienter ... je calcule ... <ESC> pour arrêter ..."
dll_on "gdi32"

RotateImage()

caption 0,"TERMINE "
end
rem ============================================================================
' Obtenir la valeur RGB d'un pixel de coordonnées x%,y% appartenant au handle_canvas hdc%
SUB GetPixel(hdc%,x%,y%)
    RGB% = dll_call3("GetPixel",hdc%,x%,y%)
END_SUB
rem ============================================================================
' Afficher un pixel aux coordonnées x%,y%, de couleur RGB clr% sur le handle_canvas hdc%
SUB SetPixel(hdc%,x%,y%,RGB%)
    ret% = dll_call4("SetPixelV",hdc%,x%,y%,RGB%)
END_SUB
rem ============================================================================
' Rotation d'une image bitmap par échange de coordonnées X et Y
SUB RotateImage()
    for x% = 0 to width(10)
        for y% = 0 to height(10)
            GetPixel(handle_canvas(10),x%,y%)      : ' Obtenir le pixel
            SetPixel(handle_canvas(20),y%,x%,RGB%) : ' Echanger ses coordonnées et l'afficher
            if scancode = 27 then exit_sub
        next y%
    next x%
END_SUB
rem ============================================================================


Modifiez la valeur de la ligne 9 : chemin de votre image.
Modifiez aussi les valeurs de la ligne 12 : dimensions de votre image.
Lancez le programme, croisez les bras et … patientez … patientez encore …
Si tout va bien, vous obtiendrez quelque comme

Ceci:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Rotation de bitmap   Jeu 23 Fév 2017 - 17:02

Mmouarf mouarf mouarf ... Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Jeu 23 Fév 2017 - 20:15

C'est sympa (surtout l'image Very Happy ) mais un peu longuet, je préfère mon script vbs...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Rotation de bitmap   Jeu 23 Fév 2017 - 20:41

Sous forme de SUB, ça donne :

Code:

rem ============================================================================
rem            Rotation d une image bitmap
rem ============================================================================

RotateImage("c:\users\acer\desktop\moto.bmp",366,225)

end
rem ============================================================================
' Rotation d'une image bitmap par échange de coordonnées X et Y
' bmp$ : Chemin de l'image
' w% et h% dimensions de l'image
SUB RotateImage(bmp$,w%,h%)
    dim_local x%, y%, RGB%, ret%
    width 0,800
    dll_on "gdi32"
    picture 10 : width 10,w% : height 10,h% : top 10,100 : left 10,100
    picture 20 : width 20,h% : height 20,w% : top 20,10 : left 20,500
    file_load 10,bmp$
    caption 0,"Veuillez patienter ... je calcule ... <ESC> pour arrêter ..."
    for x% = 0 to width(10)
        for y% = 0 to height(10)
            RGB% = dll_call3("GetPixel",handle_canvas(10),x%,y%)
            ret% = dll_call4("SetPixelV",handle_canvas(20),y%,x%,RGB%)
            if scancode = 27 then exit_sub
        next y%
    next x%
    caption 0,"TERMINE"
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Jeu 23 Fév 2017 - 21:34

Version sub:

sur la ligne:
Code:
RGB% = dll_call3("GetPixel",handle_canvas(10),x%,y%)

je n'y comprends rien avec cette erreur, je l'ai plusieurs fois de suite, même libellé, et parfois ça passe... scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 1:40

C’est bizarre ça !
C’est la valeur d’un handle_canvas et c’est bien un entier valide.
Je n’ai pas cette erreur chez moi.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 1:46

C'est d'autant plus curieux que si je mets dans la boucle un caption 0 de x et y, ça ne se produit pas toujours au même endroit, parfois (souvent) dès le début, parfois pour x entre 0 et 50...
Mais toujours le même libellé (même valeur).
Parfois ça va jusqu'au bout, mais c'est très rare, sinon ça s'arrête très vite en erreur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 2:05

Le code n'est pourtant pas compliqué.
Essaie cette version

Code:

rem ============================================================================
rem            Rotation d une image bitmap
rem ============================================================================

RotateImage("c:\users\acer\desktop\moto.bmp",366,225)

end
rem ============================================================================
' Rotation d'une image bitmap par échange de coordonnées X et Y
' bmp$ : Chemin de l'image
' w% et h% dimensions de l'image
SUB RotateImage(bmp$,w%,h%)
    dim_local x%, y%, RGB%, ret% ,hnd1%, hnd2%
    width 0,800
    dll_on "gdi32"
    picture 10 : width 10,w% : height 10,h% : top 10,100 : left 10,100
    picture 20 : width 20,h% : height 20,w% : top 20,10 : left 20,500
    file_load 10,bmp$
    caption 0,"Veuillez patienter ... je calcule ... <ESC> pour arrêter ..."
    hnd1% = handle_canvas(10) : hnd2% = handle_canvas(20)
    for x% = 0 to width(10)
        for y% = 0 to height(10)
            RGB% = dll_call3("GetPixel",hnd1%,x%,y%)
            ret% = dll_call4("SetPixelV",hnd2%,y%,x%,RGB%)
            if scancode = 27 then exit_sub
        next y%
    next x%
    caption 0,"TERMINE"
END_SUB
rem ============================================================================


EDIT : Tu as bien les bonnes valeurs de w% et h% ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 2:17

J'essaierai demain plus le temps
Rapidement: j'ai bien les bonnes valeurs w et h par rapport à mon image.

D'autre part j'ai fait un essai sans dll avec picture 20 en cible 2D et dans la boucle, COLOR_PIXEL_RED(10,x%,y%) GREEN et BLUE, puis 2D_POINT sur 20, ça marche et j'ai l'impression que le temps d'exécution est le même qu'avec les fonctions dll ... (environ 30s).
là-dessus ... Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc37



Nombre de messages : 456
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 2:50

Elle fait tourner la tête ton image ! Shocked

1er code : pas de problème, ça fonctionne.

2ème code sous forme de SUB : plantage idem que JL35

=> Je te mets une copie d'écran : peut-être auras-tu des indices avec...

Spoiler:
 

3ème code : pas de problème, fonctionnel !

Merci pour ton partage !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 15:59

Papydall,
Je confirme que ta dernière sub marche sans plantage.

Que dis-tu d'une rotation d'image d'un angle quelconque en pur Panoramic (sans appel de dll°;
Et je constate que le temps d'exécution est le même qu'avec la dll...
ici 45°
Spoiler:
 
Il reste à ajuster le positionnement de l'image dans le picture récepteur.
Le code:
Code:
rem ============================================================================
rem            Rotation d une image bitmap
rem ============================================================================
dim w%,h%,d%,bmp$,t%
bmp$ = "Z:\moto.bmp"

FILEBIN_OPEN_READ 1,bmp$: ' dimensions de l'image bitmap = w% x h%
    FILEBIN_POSITION 1,18: w% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_POSITION 1,22: h% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
FILEBIN_CLOSE 1
d% = SQR(w%*w%+h%*h%): ' diagonale
WIDTH 0,w%+d%+50: HEIGHT 0,d%+60: BORDER_SMALL 0: COLOR 0,200,255,255: font_bold 0
PICTURE 10: WIDTH 10,w%:HEIGHT 10,h%: TOP 10,10+(d%-h%)/2: LEFT 10,10
    FILE_LOAD 10,bmp$
PICTURE 20: WIDTH 20,d%: HEIGHT 20,d%: TOP 20,10: LEFT 20,w%+20: COLOR 20,200,255,255
PRINT TIME$: t% = NUMBER_TICKS: ' Début
ImgRotn(10,20,30)
t% = (NUMBER_TICKS-t%)/1000
PRINT TIME$+", durée= "+STR$(t%)+" secondes.": ' Fin
END
rem ============================================================================
SUB ImgRotn(p1%,p2%,rot%)
  ' Pivoter l'image du picture p1% d'un angle de rot% degrés, dans le picture p2%
  ' long, opération pixel par pixel: environ 2 minutes pour image 640x480)
  DIM_LOCAL ra,wi%,hi%,xc%,yc%,w2%,xc1%,yc1%,x%,y%,x1%,y1%,sra,cra
  wi% = WIDTH(p1%): hi% = HEIGHT(p1%)
  ra = rot%*PI/180: ' angle de rotation, en radians
  xc% = wi%/2: yc% = hi%/2: ' pivot de rotation (centre de l'image)
  w2% = INT(SQR(wi%*wi%+hi%*hi%)): ' diagonale (dimensions maxi du résultat)
  xc1% = w2%/2: yc1% = xc1%: ' centre du résultat
  2D_TARGET_IS p2%
  sra = SIN(ra): cra = COS(ra)
  FOR y% = 0 TO hi%-1
    FOR x% = 0 TO wi%-1
        x1% = cra*(x%-xc%)-sra*(y%-yc%)+xc1%
        y1% = sra*(x%-xc%)+cra*(y%-yc%)+yc1%
        2D_PEN_COLOR COLOR_PIXEL_RED(p1%,x%,y%),COLOR_PIXEL_GREEN(p1%,x%,y%),COLOR_PIXEL_BLUE(p1%,x%,y%)
        2D_CIRCLE x1%,y1%,1: ' i/o 2d_point, pour éviter les pixels blancs
    NEXT x%
    display
  NEXT y%
END_SUB
rem ============================================================================

Sinon, pour des rotations à +/- 90° ou 180° je préfère un script vbs, c'est beaucoup plus rapide.
(rotation fichier image -> fichier image)
Code:
SUB ImgRot90(f$,RL$,fr$)
  ' Rotation d'une image f$ de 90° à gauche (RL$="L") ou à droite (RL$="R")
  ' ou à 180° (RL$ = "RL")
  ' Résultat dans le fichier fr$ (-> NOTA: doit être de même type que f$)
  DIM_LOCAL scr$,arg$,r$,q$: q$ = CHR$(34)
  r$ = "270": IF UPPER$(RL$)="R" THEN r$ = "90"
  IF UPPER$(RL$)="RL" THEN r$ = "180"
  IF FILE_EXISTS(fr$) = 1 THEN FILE_DELETE fr$: ' sinon, erreur
  scr$ = "C:\Temp\Vbscript.vbs"
  FILE_OPEN_WRITE 9,scr$
  FILE_WRITELN 9,"Dim Img 'As ImageFile"
  FILE_WRITELN 9,"Dim IP 'As ImageProcess"
  FILE_WRITELN 9,"Set Img = CreateObject("+q$+"WIA.ImageFile"+q$+")"
  FILE_WRITELN 9,"Set IP = CreateObject("+q$+"WIA.ImageProcess"+q$+")"
  FILE_WRITELN 9,"Img.LoadFile "+q$+f$+q$
  FILE_WRITELN 9,"IP.Filters.Add IP.FilterInfos("+q$+"RotateFlip"+q$+").FilterID"
  FILE_WRITELN 9,"IP.Filters(1).Properties("+q$+"RotationAngle"+q$+") = "+r$
  FILE_WRITELN 9,"Set Img = IP.Apply(Img)"
  FILE_WRITELN 9,"Img.SaveFile "+q$+fr$+q$
  FILE_WRITELN 9,"WScript.Quit(0)"
  FILE_CLOSE 9
  EXECUTE_WAIT "Wscript.exe " + scr$: ' Exécution du script
  FILE_DELETE scr$
END_SUB


Dernière édition par JL35 le Ven 24 Fév 2017 - 17:42, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 16:23

J’ai modifié mon code pour une rotation d’un angle quelconque avec cisaillement et j’ai obtenu une drôle d’image.
Malheureusement, Panoramic Editor m’ a une fois de plus joué son mauvais tour : Panoramic a cessé … et impossible to run … et  j’ai perdu mon code.
Je ne trouve même pas le .back.
Ça frôle le désespoir ! Sad
J’ai laissé tomber tout.
J’y reviendrai(s ?) le moment venu.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 16:29

Salut papydall,
On s'est croisés, j'avais oublié de mettre mon code ci-dessus, je viens de le rajouter (et aussi la sub en vbs).

Et tu as raison, c'est rudement décourageant ce plantage sans retour et sans recours de l'éditeur, ça m'arrive de temps en temps et on perd tout.
Du coup j'ai réduit la sauvegarde automatique de 10 à 5 minutes, mais en plein milieu des essais c'est agaçant, et en plus sans raison apparente ! Evil or Very Mad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 24 Fév 2017 - 17:43

Perso, je suis persuadé que c' est justement cette sauvegarde automatique qui fait le bug.
Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5953
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 17:46

? alors ce serait nouveau, depuis la dernière version...
Et tout le monde ne semble pas avoir le problème ? enfin, je ne sais pas...

Mais c'est quand même une idée finalement, puisque ça arrive à des moments complètement inattendus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Rotation de bitmap   Ven 24 Fév 2017 - 19:42

C'est vrai que cette histoire de plantage est quand même très désagréable...
Je te comprends Papydall, c'est désespérant de se retrouver avec une fermeture et aucune sauvegarde !

C'est pourquoi je suis en train de préparer un Pano-like editeur pour palier à ce problème.
J’espère le finir rapidement...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Rotation de bitmap   

Revenir en haut Aller en bas
 
Rotation de bitmap
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Rotation de bitmap
» [résolu]Problèms Divers ....rotation ...carroussel, ect ..
» Nouvelle numérotation des chaines HD sur Bbox TV
» Rotation d'image 3D
» [Résolu] Rotation Video

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: