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

Delphi Discussion :

Imprimer un Metafile avec une bonne résolution


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Imprimer un Metafile avec une bonne résolution
    Bonjour,

    Sous Delphi 6 :
    Je dispose d'un composant qui copie dans le presse-papier un graphe au format Metafile.

    Je le récupère sous une variable TMetafile (via la procédure LoadFromClipboardFormat), et je voudrais imprimer ce graphe avec une très bonne résolution.

    Pour cela, je charge le Metafile dans un objet graphique (Timage, TPicture, PaintBox...). Mais l'impression d'un tel objet (via QReport ou ExpressPrintingSystem) se fait avec une résolution médiocre (identique à celle de l'écran, je suppose).
    J'ai pourtant paramétrer Form.PixelsPerInch à 300ppi. Mon imprimante peut imprimer à de hautes résolutions.

    Comment faire pour que l'impression de mon Metafile soit optimale ?

    En vous remerciant par avance,

    Cordialement,

    Laurent

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Reste à savoir si le Metafile-source est lui-même caractérisé d'origine avec une très bonne résolution.

    Si c'est le cas, une parade consisterait à convertir (au moins temporaiement) la source en un TBitMap initialisé pour un nombre élevé de couleurs (avec monBitMap.PixelFormat = pf24Bit; )

    Le transfert d'une image *.bmp en pf24bits s'effectue sans altération par exemple depuis un logiciel du type PaintShopPro via le presse-papier et de là dans un TImage ou plus directement vers le canvas du Printer de Delphi.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci pour cette réponse. Je vais essayer ça.

    Laurent

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    En fait, l'impression directe avec Printer.canvas.draw() fonctionne correctement, avec une bonne résolution.

    Pour imprimer mon graphe sur une feuille A4 avec une bonne résolution, le Timage doit être de 4000*4000 pixels :

    Metafile.loadFromClipboardFormat(...);
    Metafile.height := 4000 ;
    Metafile.width := 4000 ;
    QRimage.picture.metafile := Metafile;
    Printer.begindoc;
    Printer.canvas.draw(200,200,QRimage.Picture.graphic)
    Printer.endDoc;

    Le réglage de Form.PixelsPerInch ne change rien.

    Evidemment, la prévisualisation d'une telle image à l'écran et via un composant QuickReportImage ou ExpressPrintingSystem est énorme (40 pages!).
    Mais l'impression directe via Printer donne une image qui tient sur une page A4.

    Si je dimensionne mon Timage pour qu'il tienne dans la fenêtre QuickReport, il s'imprime avec une résolution médiocre.
    L'impression directe via Printer donne dans ce cas une image minuscule (2 cm...)

    Il faut sûrement que je configure une résolution ppi quelque part, mais je ne vois pas où...

    Laurent

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Puisque l'impression directe avec Printer.canvas.draw() fonctionne correctement, avec une bonne résolution, et avec le Timage de 4000*4000 pixels ... la question initiale est donc résolue.

    Pour ce qui est de la question sous-tendue par l'assertion:
    Mais l'impression directe via Printer donne une image qui tient sur une page A4.
    ... pour ajuster la taille de l'image imprimée remplacer Printer.canvas.draw() par Printer.canvas.StretchDraw(const Rect: TRect; Graphic: TGraphic ); ... et l'image tiendra dans le rectangle spécifié ... et en spécifiant un rectangle dont le rapport hauteur/largeur est égal à celui de l'image originale ... sinon le Stretch déforme l'image comme une peau élastique.

    Ensuite pour ce qui est du problème suivant :
    Si je dimensionne mon Timage pour qu'il tienne dans la fenêtre QuickReport, il s'imprime avec une résolution médiocre.
    L'impression directe via Printer donne dans ce cas une image minuscule (2 cm...)
    ... une parade consisterait à conserver le premier TImage en 4000*4000 switché sur visible:=false; et qui serait réservé à l'impression, et d'ajouter un deuxième TImage contenant une copie réduite et visible du premier pour tenir dans la fenêtre QuickReport ... et de s'arranger de sorte que le click-imprimer assure l'impression du TImage en 4000*4000 à la pace de l'autre.

    Je n'ai pas QuickReport mais sous Delphi je m'arrangerais de sorte que le click-imprimer déclenche d'abord la substitution de la petite image par la grande avant l'impression ... et l'inverse en fin d'impression.

Discussions similaires

  1. [PC portable] Recherche modele avec une bonne configuration
    Par gangsoleil dans le forum Ordinateurs
    Réponses: 7
    Dernier message: 13/02/2014, 12h49
  2. Avoir un scroll horizontal avec une bonne largeur
    Par lionheart33806 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 31/10/2011, 11h54
  3. [XL-2007] Imprimer plusieurs onglets avec une seule requete
    Par Leithz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2011, 13h59
  4. [XL-2007] imprimer les feuilles avec une imprimante differente
    Par re dans le forum Excel
    Réponses: 2
    Dernier message: 06/08/2009, 12h07
  5. [VB.NET]MDI Avec une bonne apparence
    Par charaf dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/12/2006, 16h10

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