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
» Klaus est de retour!
par Klaus Aujourd'hui à 3:41

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 3:40

» Texte sur image
par JL35 Hier à 23:56

» Compilateur FBPano
par papydall Hier à 14:54

» MIN - MAX avec SPIN
par ygeronimi Hier à 10:02

» Traceur de courbes représentatives des fonctions y = f(x)
par papydall Hier à 2:24

» HEIGHT_CLIENT(N)
par ygeronimi Ven 20 Jan 2017 - 16:41

» Non demande de commande
par ygeronimi Jeu 19 Jan 2017 - 11:50

» Bataille navale sous-marine
par papydall Jeu 19 Jan 2017 - 2:19

» Version instantanée du 16/01/2017 : PANORAMIC V 0.9.27i10
par mindstorm Mer 18 Jan 2017 - 21:05

» PLM N34
par Froggy One Mer 18 Jan 2017 - 17:32

» saving 1.png [RÉSOLU]
par Froggy One Mar 17 Jan 2017 - 19:44

» Gestionnaire de Projets Panoramic
par Froggy One Mar 17 Jan 2017 - 19:31

» ROBLARECUB (casse-tête)
par papydall Mar 17 Jan 2017 - 15:18

» Incrustation d'une image (dans une autre)
par JL35 Mar 17 Jan 2017 - 0:47

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

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

Partagez | 
 

 Adressage des pixels d'un picture

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



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

MessageSujet: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 15:36

Je suis en train de bricoler sur le format bmp (simple) et ico (plus tarabiscoté).
Quelque chose me chiffonne dans l'adressage des pixels dans Panoramic.
Un exemple:
Code:
DIM w,h
w = 20: h = 20
PICTURE 1: WIDTH 1,w: HEIGHT 1,h: COLOR 1,0,0,128
2D_TARGET_IS 1: 2D_PEN_COLOR 255,0,0
2D_LINE 0,0,w-1,h-1
2D_FILL_OFF: 2D_RECTANGLE 0,0,w-1,h-1
Zoom(1,0,0,w,h,30): ' zoom x30, pour voir
Terminate
' ==============================================================================
SUB Zoom(pict%,x%,y%,w%,h%,z%)
' Zoom x z% de la zone du picture p% en x%,y%, dimensions w%,h%
  IF LABEL("Ex") = 0 THEN LABEL Ex
  DIM_LOCAL n2d%,ff%,f%,p%,i%,j%,xp%,yp%,r%,g%,b%
  ff% = 0: f% = 900: p% = f%+1: ' variable ff% définie dans le programme appelant
  n2d% = NUMBER_2D_TARGET
  FORM f%: BORDER_SMALL f%: WIDTH f%,w%*z%+16: HEIGHT f%,h%*z%+35: ON_CLOSE f%,Ex
  PICTURE p%: PARENT p%,f%: FULL_SPACE p%
  2D_TARGET_IS p%
  yp% = 0
  FOR j% = y% TO y%+h%-1
      xp% = 0
      FOR i% = x% TO x%+w%-1
          r% = COLOR_PIXEL_RED(pict%,i%,j%): g% = COLOR_PIXEL_GREEN(pict%,i%,j%)
          b% = COLOR_PIXEL_BLUE(pict%,i%,j%)
          2D_PEN_COLOR r%,g%,b%: 2D_FILL_COLOR r%,g%,b%
          2D_RECTANGLE xp%,yp%,xp%+z%-1,yp%+z%-1
          xp% = xp%+z%
      NEXT i%
      2D_PEN_COLOR 128,128,128: 2D_LINE 0,yp%,WIDTH(p%),yp%
      yp% = yp%+z%
  NEXT j%
  FOR xp% = 0 TO WIDTH(p%) STEP z%: 2D_LINE xp%,0,xp%,HEIGHT(p%): NEXT xp%
  2D_TARGET_IS n2d%
  CAPTION f%," ZOOM x "+STR$(z%)
  WHILE ff% = 0: PAUSE 300: TO_FOREGROUND f%: END_WHILE: DELETE f%: EXIT_SUB
Ex:
  ff% = 1
RETURN
END_SUB
' ==============================================================================
C'est un Picture carré tout bête, de 20x20 pixels. Et une fonction zoom pour voir le résultat plus en détail.
Normalement les adresses des pixels devraient aller du pixel 0 au pixel 19 (20 pixels en tout).

Eh bien je m'aperçois que dans la fonction
2D_LINE x1,y1,x2,y2: ' tracé d'une ligne entre x1,y1 et x2,y2, la ligne s'arrête en x2-1 et y2-1.
Le point d'arrivée n'est pas compris dans le trait.
De même pour la fonction:
2D_RECTANGLE x1,y1,x2,y2, le rectangle est tracé de x1 à x2-1 et y1 à y2-1
Ça perturbe un peu ma logique...

Si je veux tracer ici une ligne ou un rectangle qui couvre le Picture, il faut aller de 0,0 à 20,20 (au lieu de 19,19), ça ne me paraît pas normal.

Idem pour le 2D_IMAGE_COPY x1,y1,x2,y2 qui copie la zone x1 à x2-1 et y1 à y2-1
Code:
DIM w,h
w = 20: h = 20
PICTURE 1: WIDTH 1,w: HEIGHT 1,h: COLOR 1,0,0,128
2D_TARGET_IS 1: 2D_FILL_OFF
IMAGE 2
2D_PEN_COLOR 255,0,0: 2D_RECTANGLE 0,0,5,5
2D_IMAGE_COPY 2,0,0,4,4
2D_IMAGE_PASTE 2,10,10
Zoom(1,0,0,w,h,20): ' zoom x20, pour voir
Terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman



Nombre de messages : 292
Age : 44
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 17:38

J’avais déjà constaté ça et j’en ai conclu que le point d’arrivée des commandes de tracé est EXCLU, et aussi que jack a EXCLU cette information du fichier d’aide Sad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 17:46

C'est bien dommage, parce que ce n'est pas logique, et pour moi c'est un bug, pas forcément très gênant, mais il faut bien en tenir compte quand on travaille au pixel près ! une droite, c'est du point de départ au point d'arrivée tous deux inclus.

Merci en tout cas silverman de m'avoir rassuré, je me sens moins seul.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall



Nombre de messages : 5104
Age : 66
Localisation : Moknine (Tunisie)
Date d'inscription : 03/03/2012

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 18:19

En 1961, j’ai appris le théorème suivant : Un segment de droite est une portion de droite limitée par deux points de cette droite.
Je me rappelle que j’ai fait la remarque à mon professeur de math que cette phrase était trop lourde : répétition de droite trois fois.
Sa réponse était : en mathématiques, il faut définir les choses sans ambiguïté.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude



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

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 18:55

Salut à tous,

@JL35,

Ton code fait appel à une procédure, sans END Exclamation Question

C'est curieux ça, non ?. Very Happy

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



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

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 19:04

Il n'y a pas de END mais il y a un TERMINATE qui termine tout !
Tu trouves ça choquant ?

On va dans la procédure pendant la phase de mise en place des objets (donc avant le End théorique), et au retour de la procédure ce End n'est plus nécessaire puisqu'on clôt le programme, on n'attend plus rien de l'utilisateur.

Le End serait nécessaire si on attendait des actions de l'utilisateur, ce qui n'est pas le cas ici, c'est une démo à sens unique.


Dernière édition par JL35 le Dim 8 Mai 2016 - 19:10, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall



Nombre de messages : 5104
Age : 66
Localisation : Moknine (Tunisie)
Date d'inscription : 03/03/2012

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 19:09

@Jean Claude
Tu n’as pas vu le TERMINATE qui remplace le END ?
Seulement ce TERMINATE je le déteste  affraid  affraid  affraid
TERMINATE = PLANTAGE
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude



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

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 19:31

Admettons !

Pourquoi utiliser TERMINATE, qui bug, à la place de END qui lui est irréprochable.
Si tu mets un END à la place de TERMINATE, il n'y a pas de plantage à la sortie.

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



Nombre de messages : 5104
Age : 66
Localisation : Moknine (Tunisie)
Date d'inscription : 03/03/2012

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 20:58

C'est bien ce que je dis. tongue
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Adressage des pixels d'un picture   Dim 8 Mai 2016 - 21:34

Le Terminate ferme le programme, ce que ne fait pas le End.
Et chez moi il ne plante pas, je suis revenu à la version précédente de l'éditeur à cause de ça.

Mais bon, c'est un détail par rapport au sujet, le code est court et à usage unique, chacun peut mettre un end à la place du terminate.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman



Nombre de messages : 292
Age : 44
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Adressage des pixels d'un picture   Lun 9 Mai 2016 - 14:04

@JL35
c'est dommage d'être revenu en arrière, la dernière version de travail fonctionne bien hormis le souci du 'terminate', mais ce pb est facile à contourner:

Code:
'
' remplacement de 'terminate' pour eviter le bug:

sub close_form(window)
   dll_on "user32" : dim_local null%
   null%=dll_call1("DestroyWindow",handle(window))   :' libere les resources memoires
   if window=0
      null%=dll_call1("PostQuitMessage",0)           :' indique au systeme que c'est la fin du programme
   end_if
   dll_off
end_sub


' ou a partir de panoramic0927i2 et +, on peut utiliser cette autre sub:

sub close_form(window)
 dim_local n
   n=0
   repeat
      n=n+1
   until library$(n)="_" or lower$(library$(n))="user32"
   if lower$(library$(n))<>"user32" then library n,"user32"
   '
   command "free_resources","DestroyWindow",n,"I","stdcall"   :' libere les resources memoires
   command "quit_form","PostQuitMessage",n,"I","stdcall"      :' indique au systeme que c'est la fin du programme
   '
   free_resources handle(window)
   if window=0 then quit_form 0   :' 0=code de sortie
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Adressage des pixels d'un picture   Lun 9 Mai 2016 - 14:41

Je sais bien silverman qu'il y a des palliatifs au terminate défectueux, mais bon
- pour le moment je n'utilise pas les dernières modifs de l'éditeur, donc je ne suis pas très motivé.
- j'ai depuis longtemps sur le bureau un petit batch qui ferme (fermement) Panoramic.exe pour tous les cas où ça tourne en rond ou autres, j'ai juste à cliquer dessus, et c'est radical.

Le .Bat sert à fermer impérativement une tâche quelconque en cours d'exécution:
Code:
@echo off
Taskkill.exe /F /IM %1 /T
enregistré dans C:\BAT\ sous le nom Kill.bat
Appelé depuis le bureau par:
Code:
C:\BAT\Kill.bat Panoramic.exe

Ça ferme toutes les sessions de panoramic.exe qui restent actives, on ne sait pas toujours pourquoi (j'ai aussi sur le bureau un petit utilitaire qui m'affiche tous les programmes actifs au moment du clic, avec possibilité de supprimer certains).

Il me suffirait, dans mes programmes actuels, de mettre à la place de TERMINATE:
Code:
EXECUTE "cmd.exe /c C:\BAT\Kill.bat Panoramic.exe"
et ça ferme sans discuter.

Mais je garde quand même sous le coude ta sub qui ne nécessite pas de ressource externe.

PS Pour le taskkill de panoramic.exe, je pense que c'est ce que fait d'une façon ou d'une autre l'option 'Stop' dans le menu de Panoramic_editor.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Adressage des pixels d'un picture   Aujourd'hui à 4:46

Revenir en haut Aller en bas
 
Adressage des pixels d'un picture
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Taille en pixels d'une police fixe
» Taille des polices pour Print dans un Picture
» résolution des pixels du forum
» Objet PICTURE
» Fullscreen en pixels

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Présentation et bavardage-
Sauter vers: