FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» select intégrés
Rotation de bitmap Emptypar jjn4 Hier à 18:33

» Aide de PANORAMIC
Rotation de bitmap Emptypar leclode Hier à 18:23

» PANORAMIC V 1
Rotation de bitmap Emptypar Klaus Hier à 9:53

» Je teste PANORAMIC V 1 beta 1
Rotation de bitmap Emptypar Klaus Hier à 9:52

» bouton dans autre form que 0
Rotation de bitmap Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Rotation de bitmap Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Rotation de bitmap Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Rotation de bitmap Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Rotation de bitmap Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Rotation de bitmap Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Rotation de bitmap Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Rotation de bitmap Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Rotation de bitmap Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Rotation de bitmap Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Rotation de bitmap Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

 

 Rotation de bitmap

Aller en bas 
+2
Jicehel
papydall
6 participants
AuteurMessage
papydall

papydall


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

Rotation de bitmap Empty
MessageSujet: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 14: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
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 15:02

Mmouarf mouarf mouarf ... Very Happy
Revenir en haut Aller en bas
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 18: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
papydall

papydall


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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 18: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
http://papydall-panoramic.forumarabia.com/
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 19:34

Version sub:
Rotation de bitmap Err10
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
papydall

papydall


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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 23: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
http://papydall-panoramic.forumarabia.com/
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyJeu 23 Fév 2017 - 23: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
papydall

papydall


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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 0: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
http://papydall-panoramic.forumarabia.com/
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 0: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
Marc

Marc


Nombre de messages : 2390
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 0: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
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 13: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 - 15:42, édité 2 fois
Revenir en haut Aller en bas
papydall

papydall


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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 14: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
http://papydall-panoramic.forumarabia.com/
JL35




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 14: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
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Rotation de bitmap Empty
MessageSujet: re   Rotation de bitmap EmptyVen 24 Fév 2017 - 15:43

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




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

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 15: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
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap EmptyVen 24 Fév 2017 - 17: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
http://gpp.panoramic.free.fr
Contenu sponsorisé





Rotation de bitmap Empty
MessageSujet: Re: Rotation de bitmap   Rotation de bitmap Empty

Revenir en haut Aller en bas
 
Rotation de bitmap
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Rotation de bitmap (bis)
» Une pseudo-police bitmap
» Rotation d'un rectangle
» pb avec chargement bitmap
» Structure d'une image bitmap .bmp

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: