IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

WMF mal généré


Sujet :

Langage Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut WMF mal généré
    Bonjour

    Quelqu'un saurait-il me dire pourquoi le code suivant crée un fichier image de taille 164 x 217 sur une VM en windows XP , et 267 x 266 sur un windows 7 ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
      Wmf:  TMetafile;
      Wmfc: TMetafileCanvas;
    begin
      Wmf := TMetafile.Create;
      Wmf.Width  := 200;
      Wmf.Height := 200;
      Wmfc := TMetafileCanvas.Create(Wmf, GetDC(Handle));
      Wmfc.Free;
      Wmf.SaveToFile('C:\Data\fic.wmf');
      Wmf.Free;

    Bizarrement, si je sauvegarde en emf, les tailles sont respectées à 1 pixel près (201 x 201).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wmf.SaveToFile('C:\Data\fic.emf');

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Embarcadero dit ici :
    La propriété MMHeight est utilisée pour fournir une indication plus précise de la hauteur du graphique. La propriété Height est toujours exprimée en unité pixel du périphérique écran. Pour éviter une perte de précision lors de la conversion entre pixels du périphérique et millimètres, consultez ou définissez les dimensions en millimètres avec MMHeight.
    et :
    Chaque objet graphique descendant définit ses propres méthodes de lecture et d'écriture de la propriété Height.
    N'y aurait-il pas :
    1) une différence mm/pixel selon que VM ou OS, à explorer ?
    2) une meilleure adéquation avec emf, à confirmer ?

    Que se passe-t-il si tu fixes les dimensions en mm ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Je ne connaissais pas les MMHeight et MMWidth. Je me coucherai moins bête.
    Par contre, chose étrange, leur utilisation donne l’effet inverse .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Wmf.MMWidth  := 4000;
      Wmf.MMHeight := 4000;
      Wmfc := TMetafileCanvas.Create(Wmf, GetDC(Handle));
      Wmfc.Free;
      Wmf.SaveToFile('C:\Data\fic.emf');
      Wmf.SaveToFile('C:\Data\fic.wmf');
    Sur la VM XP:
    fic.emf : 185 x 140
    fic.wmf: 151 x 151

    Sur W7 physique:
    fic.emf: 113 x 114
    fic.wmf: 151 x 151



    J'oubliais de préciser que je fais ces tests sur Delphi 7.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      ShowMessage(IntToStr(GetDeviceCaps(GetDC(Handle), LOGPIXELSX)));
      ShowMessage(IntToStr(GetDeviceCaps(GetDC(Handle), LOGPIXELSY)));
    renvoient tous les deux 96

Discussions similaires

  1. [FPDF] Fichier mal généré/corrompu (adobe reader)
    Par FroJa dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/05/2013, 18h24
  2. [FPDF] fichier mal généré/corrompu
    Par JuTs dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/05/2007, 22h26
  3. Réponses: 3
    Dernier message: 12/05/2003, 12h11
  4. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo