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
» PanExpress : l'éditeur Panoramic avec création d'objet
par Marc Aujourd'hui à 1:24

» Demande pour Jack concernant PanExpress
par Marc Hier à 23:56

» Calculatrice
par joeeee2017 Hier à 9:35

» EPP_V01 éditeur pour Panoramic
par Jean Claude Hier à 8:51

» Planétarium virtuel.
par Jean Claude Lun 17 Sep 2018 - 18:14

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

» Plantage lors de l'exécution de EXIT_SUB
par Jack Lun 3 Sep 2018 - 18:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Déformation d'image en trapèze

Aller en bas 
AuteurMessage
JL35



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

MessageSujet: Déformation d'image en trapèze   Sam 13 Jan 2018 - 14:26

Par exemple pour mettre une image en perspective, ou n'importe quel autre usage, simuler l'affichage d'une image sur un mur latéral, comme dans une galerie de peintures...
Le traitement est un peu long (fonction de la taille de l'image), colonne par colonne de pixels, à l'aide d'un Scene2d/Sprite, chaque colonne étant agrandie ou raccourcie par rapport à la précédente, suivant le sens du trapèze.
On utilise la fonction SPRITE_Y_SCALE pour ajuster la colonne de pixels à la hauteur voulue.

Le travail est exécuté dans une sub 'Trapèze'
Paramètres: image d'origine (jpg, bmp), sens du rétrécissement droite ou gauche, facteur de rétrécissement,
fichier image résultat (bmp)
Il faut évidemment adapter les chemins: fm$ = fichier temporaire de manoeuvre

Code:
' ==============================================================================
SUB Trapeze_H(f$,dg$,r,fr$)
  ' Déformation d'une image en trapèze horizontal
  ' Origine f$ (jpg, bmp), résultat dans fr$ (bmp)
  ' dg$ = "R" ou "L" côté droit (R) ou gauche (L) en trapèze
  ' r = facteur de rétrécissement par rapport au côté fixe, ex. r= 0.5 (= 1/2)
  DIM_LOCAL fm$,p%,im%,s2%,sp%,w%,h%,h1%,hl%,ry,rh,cy,x%,y%,d%,delta
  fm$ = "C:\TEMP\Provy.bmp"
  p% = 900: PICTURE p%: HIDE p%: FILE_LOAD p%,f$: FILE_SAVE p%,fm$
  FILEBIN_OPEN_READ 1,fm$: ' dimensions image -> w%, 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
  WIDTH p%,w%: HEIGHT p%,h%: FILE_LOAD p%,fm$: FILE_DELETE fm$
  im% = p%+1: IMAGE im%
  2D_TARGET_IS p%
  IF UPPER$(dg$) = "R"
      hl% = h%: y% = 0
  ELSE
      hl% = h%*r: y% = (h%-r*h%)/2
  END_IF
  d% = (h%-h%*r)/2: ' diminution totale d'ordonnée sur la largeur
  delta = d%/w%: ' diminution par colonne
  ry = y%: rh = hl%
  s2% = im%+1: SCENE2D s2%: WIDTH s2%,w%: HEIGHT s2%,h%
  sp% = s2%-1
  FOR x% = 0 TO w%-1
      2D_IMAGE_COPY im%,x%,0,x%+1,h%-1: ' 1 ligne verticale
      sp% = sp%+1: SPRITE sp%
      SPRITE_IMAGE_LOAD sp%,im%
      cy = hl%/h%
      SPRITE_Y_SCALE sp%,cy
      SPRITE_POSITION sp%,x%,y%
      IF UPPER$(dg$) = "R"
          ry = ry+delta: rh = rh-2*delta
      ELSE
          ry = ry-delta: rh = rh+2*delta
      END_IF
      y% = ry: hl% = rh: ' nouvelle hauteur de ligne
  NEXT x%
  SNAPSHOT s2%,fr$
  2D_TARGET_IS 0: DELETE p%: DELETE im%: DELETE s2%: SPRITE_DELETE_ALL
END_SUB
' ==============================================================================
SUB Trapeze_V(f$,dg$,r,fr$)
  ' Déformation d'une image en trapèze vertical
  ' Origine f$ (jpg, bmp), résultat dans fr$ (bmp)
  ' dg$ = "T" ou "B" côté haut (T) ou bas (B) en trapèze
  ' r = facteur de rétrécissement par rapport au côté fixe, ex. r= 0.5 (= 1/2)
  DIM_LOCAL fm$,p%,im%,s2%,sp%,w%,h%,w1%,wl%,rx,rw,cx,x%,y%,d%,delta
  fm$ = "C:\TEMP\Provy.bmp"
  p% = 900: PICTURE p%: HIDE p%: FILE_LOAD p%,f$: FILE_SAVE p%,fm$
  FILEBIN_OPEN_READ 1,fm$: ' dimensions image -> w%, 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
  WIDTH p%,w%: HEIGHT p%,h%: FILE_LOAD p%,fm$: FILE_DELETE fm$
  im% = p%+1: IMAGE im%
  2D_TARGET_IS p%
  IF UPPER$(dg$) = "B"
      wl% = w%: x% = 0
  ELSE
      wl% = w%*r: x% = (w%-r*w%)/2
  END_IF
  d% = (w%-w%*r)/2: ' diminution totale d'abscisse sur la hauteur
  delta = d%/h%: ' diminution par ligne
  rx = x%: rw = wl%
  s2% = im%+1: SCENE2D s2%: WIDTH s2%,w%: HEIGHT s2%,h%
  sp% = s2%-1
  FOR y% = 0 TO h%-1
      2D_IMAGE_COPY im%,0,y%,w%-1,y%+1: ' 1 ligne horizontale
      sp% = sp%+1: SPRITE sp%
      SPRITE_IMAGE_LOAD sp%,im%
      cx = wl%/w%
      SPRITE_X_SCALE sp%,cx
      SPRITE_POSITION sp%,x%,y%
      IF UPPER$(dg$) = "B"
          rx = rx+delta: rw = rw-2*delta
      ELSE
          rx = rx-delta: rw = rw+2*delta
      END_IF
      x% = rx: wl% = rw: ' nouvelle largeur de ligne
  NEXT y%
  SNAPSHOT s2%,fr$
  2D_TARGET_IS 0: DELETE p%: DELETE im%: DELETE s2%: SPRITE_DELETE_ALL
END_SUB
' ==============================================================================

Par exemple (2 images déformées, une normale au centre):


NB édité à 18h00
J'ai séparé en deux subs Trapeze_H() et Trapeze_V() pour déformations en trapèze hiorizontal ou vertical.


Dernière édition par JL35 le Sam 13 Jan 2018 - 18:07, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1761
Date d'inscription : 13/09/2009

MessageSujet: +++   Sam 13 Jan 2018 - 14:44

Ouahhhh, carrément artistique !
farao
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
JL35



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

MessageSujet: Re: Déformation d'image en trapèze   Sam 13 Jan 2018 - 14:51

Merci jj, j'aurais pu prendre 3 images différentes, il faudra que j'essaye... ça pourrait être marrant avec des photos persos.
En tout cas c'est simple à faire. On peut imaginer facilement des trapèzes vers le haut ou vers le bas, sur le même principe, mais je n'en ai pas trop vu l'utilité.

J'ai édité pour ajouter une sub trapèze vertical, pour avoir les 4 possibilités. Et corrigé quelques erreurs de langage.
Par exemple, la même image déformée dans les 4 sens, et intacte au milieu, comme dans l'intérieur d'un cube (donc 5 images, regroupées dans un Scene2d):
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5637
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Déformation d'image en trapèze   Sam 13 Jan 2018 - 20:20

Salut à tous,

Bravo JL35, voilà un code qui permet de construire un monde en 3D.

Ce n'était peut-être pas ton intention initiale mais ça peut être utilisé pour ça....

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

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

MessageSujet: Re: Déformation d'image en trapèze   Sam 13 Jan 2018 - 21:53

Bonsoir JL35 !

Très bonne idée cette déformation, et le principe que tu utilises est très intéressant.

Par contre, sur une image de taille importante, le temps est long, très long... Suspect
Espérant que jack nous concoctera un compilateur pour améliorer tout çà !

Il n'en reste pas moins que l'idée est excellente. Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Déformation d'image en trapèze   Sam 13 Jan 2018 - 22:55

En tilisant KGF.dll tu as aussi:
http://klauspanoramic.esy.es/TorturePicture.html
Cette fonction permet de déformer un rectangle en un quatrilatère quelconque (et donc en un trapèze). C'est assez rapide. Mais, évidemment, ce n'est plus 100 % Panoramic...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: Déformation d'image en trapèze   Dim 14 Jan 2018 - 0:58

C'est vrai que c'est valable pour de petites images, mais pas en temps réel sur des images plus importantes, à moins de créer les images une fois pour toutes pour les utiliser ensuite à part.
Le traitement se fait ligne de pixels par ligne de pixels, mais c'est vrai que le principe m'a semblé intéressant.

Klaus, je n'ai jamais utilisé cette fonction de kgf.dll, ça ouvre aussi des horizons, je regarderai.
D'un autre côté j'aime bien le panoramic pur, mais bon, j'utilise aussi des ressources externes quand c'est intéressant (et surtout kgf.dll !)
Bonne nuit à tous !

Je viens de regarder vite fait, effectivement la fonction de kgf.dll est beaucoup plus souple et plus rapide...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Déformation d'image en trapèze   Dim 14 Jan 2018 - 13:53

Effectivement Klaus, cette fonction TorturePicture de Kgf.dll est très intéressante.

Elle ne permet pas seulement de torturer des images (!), mais de les redimensionner (agrandir, réduire) à sa guise sans déformations. Et en plus, très rapidement.

Je m'en suis fait une petite sub, transparente (sans affichage) pour le programme appelant, le résultat étant renvoyé sois dans un fichier bmp, soit dans le presse-papier.
(le chemin de kgf.dll est à ajuster)
Code:
SUB Trapeze(f$,x1%,y1%,x2%,y2%,x3%,y3%,x4%,y4%,fr$)
  ' Déformation d'une image rectangulaire f$ en quadrilatère quelconque
  ' Paramètres: coordonnées des sommets résultants dans le sens des aiguilles,
  '             en commençant par le sommet haut/gauche
  ' Résultat dans fr$ (bmp) (ou clipboard si fr$ = "").
  DIM_LOCAL p%,res%,hg$,hd$,bd$,bg$
  hg$ = STR$(x1%)+","+STR$(y1%): hd$ = STR$(x2%)+","+STR$(y2%)
  bd$ = STR$(x3%)+","+STR$(y3%): bg$ = STR$(x4%)+","+STR$(y4%)
  p% = 900: PICTURE p%: HIDE p%: FILE_LOAD p%,f$: CLIPBOARD_COPY p%
  DLL_ON "C:\PANORAMIC\KGF\KGF.dll"
    res% = DLL_CALL0("LoadPicture")
    res% = DLL_CALL4("TorturePicture",ADR(hg$),ADR(hd$),ADR(bd$),ADR(bg$))
    res% = DLL_CALL0("SavePicture")
  DLL_OFF
  IF fr$ <> "" THEN CLIPBOARD_PASTE p%: FILE_SAVE p%,fr$
  DELETE p%
END_SUB
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Déformation d'image en trapèze   Dim 14 Jan 2018 - 14:22

Super ! C'est bien ça, l'esprit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
mindstorm

avatar

Nombre de messages : 559
Age : 49
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Déformation d'image en trapèze   Mar 16 Jan 2018 - 19:06

Vraiment super Travail
j'avais modestement créer un programme pur panoramic pour atteindre le même résultat avec un traitement très rapide.
La seul limite est que nous n'avons pas une définition d'image très poussé en 3D.
je vous livre les quelques lignes:
Code:
dim a,xm,ym ,proph,roph,b,c,pi
label correc,rotpho
pi=acos (-1)
width 0,1000: height 0,1000  : border_small 0 :left 0,250
scene3d 1:left 1,200:top 1,50:width 1,600:height 1,600
print "correction de l'angle de prise de vue "
form 303 : left 303,0 :top 303,420 :height 303,100 :width 303,240 : caption 303,"Photo" : command_target_is 303
main_menu 81
sub_menu 83 : caption 83,"correction" : parent 83,81 :on_click 83,correc
sub_menu 84 : caption 84,"portait-paysage" : parent 84,81 :on_click 84,rotpho
scroll_bar 307 :top 307,0 :min 307,-45:max 307,45:position 307,0
alpha 317:caption 317,"parallaxe":top 317,20 :left 317,130
3d_cube 10,1 :3d_scale 10,3,4,1
3d_load_texture 10,"votrephoto.bmp"
roph=0

end

correc:
a =position (307)
3d_rotate 10,a,0,0
proph=even(roph)
 if proph =1
   3d_scale 10,6,(4/cos(a/(20*pi))),0.1
 else
   3d_scale 10,4,(6/cos(a/(20*pi))),0.1
 end_if
b=cos (a/64)
print a
print b
return

rotpho:
roph=roph+1
gosub correc
return
Comme vous le voyez, ici il n'y a qu'un sens de rotation mais vous pouvez tout imaginer!
bonne programmation a tous
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: Re: Déformation d'image en trapèze   Sam 7 Avr 2018 - 18:02

Pourquoi ai-je en permanence le même message d'erreur sur la ligne 2 :

---------------------------
Panoramic_editor
---------------------------
(32) Illegal instruction. Line : 2
---------------------------
SUB Trapeze_H(f$,dg$,r,fr$)


Ah il faut envoyer des paramètres....
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Déformation d'image en trapèze   Sam 7 Avr 2018 - 21:00

Ben oui, une sub n'est qu'un sous-programme qu'il faut appeler avec des paramètres.
J'aurais dû mettre un exemple d'appel, comme d'habitude... mea culpa.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Déformation d'image en trapèze   

Revenir en haut Aller en bas
 
Déformation d'image en trapèze
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Image défilante
» création d' une image pour tagger
» Offre exceptionnelle : True Image 10 en version gratuite et complète
» largeur d'image chargée non conforme ?
» Afficher une image un plein écran

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: