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
» Logiciel de planétarium.
Déformation d'image en trapèze Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Déformation d'image en trapèze Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Déformation d'image en trapèze Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Déformation d'image en trapèze Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Déformation d'image en trapèze Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Déformation d'image en trapèze Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Déformation d'image en trapèze Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Déformation d'image en trapèze Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Déformation d'image en trapèze Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Déformation d'image en trapèze Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Déformation d'image en trapèze Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Déformation d'image en trapèze Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Déformation d'image en trapèze Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Déformation d'image en trapèze Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Déformation d'image en trapèze Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

 

 Déformation d'image en trapèze

Aller en bas 
+3
Jean Claude
jjn4
JL35
7 participants
AuteurMessage
JL35




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

Déformation d'image en trapèze Empty
MessageSujet: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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):
Déformation d'image en trapèze Image110

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
jjn4

jjn4


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

Déformation d'image en trapèze Empty
MessageSujet: +++   Déformation d'image en trapèze EmptySam 13 Jan 2018 - 14:44

Ouahhhh, carrément artistique !
farao
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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):
Déformation d'image en trapèze Exempl11
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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
Minibug

Minibug


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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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
http://gpp.panoramic.free.fr
Klaus

Klaus


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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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
http://klauspanoramic.comxa.com/index.html
JL35




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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptyDim 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
JL35




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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptyDim 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
Klaus

Klaus


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

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

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

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptyMar 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
Fredisland




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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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
JL35




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

Déformation d'image en trapèze Empty
MessageSujet: Re: Déformation d'image en trapèze   Déformation d'image en trapèze EmptySam 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
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Déformation d'image en trapèze
Revenir en haut 
Page 1 sur 1

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: