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.
Calcul du format d'une image Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Calcul du format d'une image Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Calcul du format d'une image Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Calcul du format d'une image Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Calcul du format d'une image Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Calcul du format d'une image Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Calcul du format d'une image Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Calcul du format d'une image Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Calcul du format d'une image Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Calcul du format d'une image Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Calcul du format d'une image Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Calcul du format d'une image Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Calcul du format d'une image Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Calcul du format d'une image Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Calcul du format d'une image 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
-29%
Le deal à ne pas rater :
DYSON V8 Origin – Aspirateur balai sans fil
269.99 € 379.99 €
Voir le deal

 

 Calcul du format d'une image

Aller en bas 
3 participants
AuteurMessage
jjn4

jjn4


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

Calcul du format d'une image Empty
MessageSujet: Calcul du format d'une image   Calcul du format d'une image EmptyVen 8 Jan 2016 - 16:57

J'ai réutilisé le travail qu'on avait fait, JL35 et moi en 2010,
et je l'ai réactualisé avec des sub pour le rendre réutilisable
et l'appliquer à plein de programmes :
Code:
rem ' Routine de calcul des dimensions d'une image jgg ou bmp - Rout-format-imag
  dim ha% , la% : rem Hauteur et Largeur de la photo
  dim np$ : rem Nom de la Photo
  dim pb : rem Plan B pour les jpg anormaux
  label choisir : rem Choisir la photo à mesurer

rem form0
  width 0,999
  caption 0,"Calcul des dimensions d'une image"

alpha 10 : rem Affichage des dimensions de la photo
  left 10,5
  top 10,5

button 20 : rem Bouton de choix de la photo à mesurer
  left 20,10
  top 20,40
  caption 20,"Choisir"
  on_click 20,choisir

end

choisir: : rem Choisir la photo à mesurer
  open_dialog 100
      np$=file_name$(100)
  delete 100
  la%=0
  ha%=0
  if right$(np$,4)=".bmp"
      format_bmp(np$)
  end_if
  pb=0
  if right$(np$,4)=".jpg"
      format_jpg(np$)
  end_if
  if pb=1
      format_pb(np$)
  end_if
  caption 0,np$
  caption 10,"L="+str$(la%)+" x "+"H="+str$(ha%)+" - Plan "+chr$(65+pb)
return

sub format_bmp(np$) : rem Calcul des dimensions d`une photo bmp
  dim_local a , b , c , d : rem Variables à utilisation multiple
  np$=lower$(np$)
  if right$(np$,4)=".bmp"
      filebin_open_read 1,np$
        filebin_position 1,18
        filebin_read 1,a
        filebin_read 1,b
        filebin_position 1,22
        filebin_read 1,c
        filebin_read 1,d
      filebin_close 1
      la%=256*b+a
      ha%=256*d+c
  end_if
end_sub

sub format_jpg(np$) : rem Calcul des dimensions d`une photo jpg normale
  dim_local h , i , j : rem Variables à utilisation multiple
  dim_local a% : rem Variables à utilisation multiple
  dim_local ta% : rem Taille du fichier
  dim_local oc%(10) : rem Les 10 premiers octets du fichier
  np$=lower$(np$)
  if right$(np$,4)=".jpg"
      filebin_open_read 1,np$
        ta%=filebin_size(1)
        filebin_read 1,oc%(1)
        filebin_read 1,oc%(2)
        if oc%(1)=255 and oc%(2)=216
            repeat
              repeat
                  h=i+2+j
                  if h>=ta%
                    pb=1
                    filebin_close 1
                    exit_sub
                  end_if
                  filebin_position 1,h
                  for a%=1 to 4
                    filebin_read 1,oc%(a%)
                  next a%
                  if oc%(1)<>255
                    pb=1
                    filebin_close 1
                    exit_sub
                  end_if
                  j=256*oc%(3)+oc%(4)
                  i=filebin_pos(1)-4
              until oc%(2)=192 or oc%(2)=194
              for a%=1 to 5
                  filebin_read 1,oc%(a%)
              next a%
            until oc%(1)=8
            ha%=256*oc%(2)+oc%(3)
            la%=256*oc%(4)+oc%(5)
        else
            pb=1
        end_if
      filebin_close 1
  end_if
end_sub
                   
sub format_pb(np$) : rem Plan B : Calcul des dimensions d`une photo jpg anormale
  dim_local a , b , c , d : rem Variables à utilisation multiple
  picture 199 : rem Affichage provisoire de la photo
      hide 199
      file_load 199,np$
      file_save 199,"C:\Provy.bmp"
  delete 199
  filebin_open_read 1,"C:\Provy.bmp"
      filebin_position 1,18
      filebin_read 1,a
      filebin_read 1,b
      filebin_position 1,22
      filebin_read 1,c
      filebin_read 1,d
  filebin_close 1
  file_delete "C:\Provy.bmp"
  la%=256*b+a
  ha%=256*d+c
end_sub
Je ne sais pas si d'autres méthodes ont été trouvées, depuis 2010,
et si il est possible de faire mieux. Enfin, comme ça, c'est déjà utilisable.
scratch alien Smile


Dernière édition par jjn4 le Sam 9 Jan 2016 - 15:51, édité 1 fois
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Calcul du format d'une image Empty
MessageSujet: Re: Calcul du format d'une image   Calcul du format d'une image EmptyVen 8 Jan 2016 - 18:29

Salut jjn ! ça fait plaisir de te revoir au boulot ! et au passage, Bonne Année !
J'ai fait entretemps quelque chose d'un peu plus compact, mais je ne me souviens plus si ça marche pour les jpg 'anormaux' comme tu les appelles, il me semble...
(j'ai regroupé jpg et bmp):
Code:
SUB DimJpgBmp(f$)
' Dimensions de l'image Jpg ou Bmp f$ -> wi% et hi%
DIM_LOCAL a$,i%
IF VARIABLE("wi%")=0 THEN DIM wi%
IF VARIABLE("hi%")=0 THEN DIM hi%
FILEBIN_OPEN_READ 9,f$: FILEBIN_HEXA_READ 9,2000,a$: FILEBIN_CLOSE 9
IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ".JPG"
    i% = INSTR(a$, "02A004")
    IF i% > 0: ' infos Exif
        wi% = HEX(MID$(a$,i%+16,2))+256*HEX(MID$(a$,i%+18,2))
        i% = INSTR(a$, "03A004")
        IF i% > 0 THEN hi% = HEX(MID$(a$,i%+16,2))+256*HEX(MID$(a$,i%+18,2))
    ELSE
        ' si pas d'exifs
        i% = INSTR(a$,"FFC00011"): IF i% = 0 THEN i% = INSTR(a$, "FFC20011")
        IF i%>0 THEN hi%=HEX(MID$(a$,i%+10,4)): wi%=HEX(MID$(a$,i%+14,4))
    END_IF
ELSE
    IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ".BMP"
        wi% = HEX(MID$(a$,37,2))+256*HEX(MID$(a$,39,2))
        hi% = HEX(MID$(a$,45,2))+256*HEX(MID$(a$,47,2))
    END_IF
END_IF
END_SUB
19h50 une petite correction d'étourderie...


Dernière édition par JL35 le Ven 8 Jan 2016 - 19:50, édité 1 fois
Revenir en haut Aller en bas
Klaus

Klaus


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

Calcul du format d'une image Empty
MessageSujet: Re: Calcul du format d'une image   Calcul du format d'une image EmptyVen 8 Jan 2016 - 18:34

Intéressant. Tu peux aussi charger l'image dans le presse-papier, et de là dans un picture de grande dimension (il peut être invisible). Et on analyse le picture, séparément en largeur et hauteur, par la méthode de dichotomie. C'est 100 % Panoramic (il y a bien sûr une fonction KGF.dll qui fait ça, mais ce n'est pas le but de l'exercice). Pour tester le programme suivant, charge une image quelconque dans le presse-papier, puis lance le programme:
Code:
' dimensions_image_dans_presse-papier.bas
dim R%, G%, B%, w%, h%, delta%

picture 2 : left 2,200 : width 2,8096 : height 2,8096
stretch_off 2
2d_target_is 2
display
clipboard_paste 2
display

w% = width(2)
h% = height(2)
display
R% = color_pixel_red(2,w%-1,0)
G% = color_pixel_green(2,w%-1,0)
B% = color_pixel_blue(2,w%-1,0)
print str$(R%)+","+str$(G%)+","+str$(B%)
delta% = w%
while delta%<>0
  if (R%+G%+B%)=0
    delta% = abs(delta%)/2
    w% = w% - delta%
  else
    delta% = 0 - abs(delta%)/2
    w% = w% - delta%
  end_if
  R% = color_pixel_red(2,w%-1,0)
  G% = color_pixel_green(2,w%-1,0)
  B% = color_pixel_blue(2,w%-1,0)
end_while

R% = color_pixel_red(2,0,h%-1)
G% = color_pixel_green(2,0,h%-1)
B% = color_pixel_blue(2,0,h%-1)
delta% = h%
while delta%<>0
  if (R%+G%+B%)=0
    delta% = abs(delta%)/2
    h% = h% - delta%
  else
    delta% = 0 - abs(delta%)/2
    h% = h% - delta%
  end_if
  R% = color_pixel_red(2,0,h%-1)
  G% = color_pixel_green(2,0,h%-1)
  B% = color_pixel_blue(2,0,h%-1)
end_while

R% = color_pixel_red(2,w%-1,h%/2)
G% = color_pixel_green(2,w%-1,h%/2)
B% = color_pixel_blue(2,w%-1,h%/2)
if (R%+G%+B%)=0 then w% = w%-1
R% = color_pixel_red(2,w%/2,h%-1)
G% = color_pixel_green(2,w%/2,h%-1)
B% = color_pixel_blue(2,w%/2,h%-1)
if (R%+G%+B%)=0 then h% = h%-1

print str$(w%)+","+str$(h%)

end
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
jjn4

jjn4


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

Calcul du format d'une image Empty
MessageSujet: +++   Calcul du format d'une image EmptyVen 8 Jan 2016 - 19:38

Oui, bonne année et la santé surtout !
Hou, dites donc, ça carbure ferme, tous les deux !
Ca rend dur de s'absenter longtemps !
Il faudra que je retrouve les jpg anormaux...
Bon, je verrai cela plus en détail demain.
No alien Sleep
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Klaus

Klaus


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

Calcul du format d'une image Empty
MessageSujet: Re: Calcul du format d'une image   Calcul du format d'une image EmptyVen 8 Jan 2016 - 19:50

Je mien devrait fonctionner avec toutes les images, JPG ou pas... Pourvu qu'on puisse la mettre dans le presse-papier.
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

Calcul du format d'une image Empty
MessageSujet: Re: Calcul du format d'une image   Calcul du format d'une image EmptyVen 8 Jan 2016 - 20:09

Klaus, ton système est efficace et rapide, et ne tient pas compte des données inscrites dans le fichier, donc ça marche dans tous les cas (pour la discrétion j'ai fait un Hide 2 et j'ai supprimé les display et affichages, sauf le résultat final).
En Panoramic on ne peut mettre que Bmp ou Jpg dans le presse-papier, mais c'est bien de ceux-là qu'on parle ici.

Jjn4, est-ce que les jpg dits anormaux sont ceux qui n'ont pas de données Exifs, je ne m'en souviens plus...?
Tu as fait deux subs, une pour jpg normaux, une pour jpg anormaux, comment savoir à l'avance dans quel cas on est pour appeler la bonne sub ?
Pardon j'avais pas bien lu l'appel, tu essayes d'abord la méthode 'normale', et puis l'autre si ça ne va pas...


@Klaus,
Finalement la méthode jjn4 (pour jpg anormaux) marche dans tous les cas: chargement de l'image dans un Picture caché (aux dimensions implicites), sauvegarde dans un Bmp temporaire, et lecture directe des dimensions dans l'en-tête, pas besoin de ton grand picture de 8096x8096 ni du presse-papier !
En simplifiant:
Code:
SUB Dimima(f$)
    ' Image JPG ou BMP exclusivement, dimensions rendues dans wi% et hi%
   DIM_LOCAL fm$: fm$ = "C:\TEMP\Provy.bmp"
   PICTURE 199: HIDE 199: FILE_LOAD 199,f$: FILE_SAVE 199,fm$: DELETE 199
   FILEBIN_OPEN_READ 1,fm$
      FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
   FILEBIN_CLOSE 1
   FILE_DELETE fm$
END_SUB
Revenir en haut Aller en bas
jjn4

jjn4


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

Calcul du format d'une image Empty
MessageSujet: +++   Calcul du format d'une image EmptySam 9 Jan 2016 - 16:04

Finalement, j'ai retrouvé la dernière image jpg particulièrement anormale que j'avais trouvée en 2010.
J'en ai d'ailleurs modifié mon programme situé plus haut, car le plan B, je ne l'avais pas essayé et il y avait un bug...
Maintenant, mon programme marche dans tous les cas.
Celui de JL35 aussi lorsqu'on y adjoint le supplément qu'il a rajouté dernièrement.
Quand au programme de Klaus, il marche dans tous les cas possibles, j'ai même essayé avec une gif, une tiff et une png.
Finalement, ça fait trois programmes qui marchent. C'est super !
Smile cheers alien cheers Very Happy
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





Calcul du format d'une image Empty
MessageSujet: Re: Calcul du format d'une image   Calcul du format d'une image Empty

Revenir en haut Aller en bas
 
Calcul du format d'une image
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Calcul d’angle ALIAS Question de calcul de moyenne : RESOLU
» Récupérer l'image d'un IMAGE dans un picture
» image copy image paste
» Gestion du format png
» Projets sur format A4

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: