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 :

Impression d'images de tailles décimales


Sujet :

Delphi

  1. #1
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut Impression d'images de tailles décimales
    Bonjour,

    je désire imprimer une image choisie par l'utilisateur dans une taille également choisie par l'utilisateur. Le problème, c'est que la fonction "Printer" de Delphi n'accèpte que des entiers alors que l'utilisateur peut choisir des valeurs décimales pour la largeur comme pour la hauteur.
    Il s'agit très exactement d'une application qui imprime(ra) des jaquettes (DVD, cd, etc...).
    Pouvez-vous me conseiller ?

    Merci d'avance.
    [Il était une fois Delphi ....]


  2. #2
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Points : 76
    Points
    76
    Par défaut
    Comment ça décimal ? Cela depend de l'unité... Si ce sont des pixels, comme printer de delphi le fait par defaut, ce ne peut être que des entiers...

    Bruno

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    bonjour

    il faut que tu convertisse la valeur en décimale de ton utilisateurs cm,mm en pixel en respectant la resolution de l'imprimante ex 600 dpi = dot per inch = point par pouces.

    Recherche le nombre de pouces requis conversion cm -> pouces puis * par la resolution de l'imprimante = taille en pixel de l'image a dessiner sur l'imprimante en utilisant l'unité printer
    @+

  4. #4
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Merci à vous deux.
    Ok, j'avoue que ma question était stupide!
    1 cm = 0,393700787 pouces ? c'est correct ? et ensuite * par la resolution de l'imprimante ?
    [Il était une fois Delphi ....]


  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    voila une partie du code que j'utilise pour imprimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    C_pouce_mm=25.4
     
    FXPixelsParPouce:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);
    FYPixelsParPouce:=GetDeviceCaps(Printer.Handle,LOGPIXELSY);
    FNonImprimableHorizPixelsX:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETX);
    FNonImprimableHorizPixelsY:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETY);
     
    function TPrinterInfo.Millimetres2PixelsX(Millims: integer): integer;
    begin
     result := Trunc(Millims / (C_pouce_mm / XPixelsParPouce));
    end;
     
    function TPrinterInfo.Millimetres2PixelsY(Millims: integer): integer;
    begin
     result := Trunc(Millims / (C_pouce_mm / YPixelsParPouce));
    end;
     
    procedure PrintBitmap(Canvas:  TCanvas; DestRect:  TRect;  Bitmap:  TBitmap);
      var
        BitmapHeader:  pBitmapInfo;
        BitmapImage :  POINTER;
        HeaderSize  :  DWORD;    // Use DWORD for D3-D5 compatibility
        ImageSize   :  DWORD;
    begin
      GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
      GetMem(BitmapHeader, HeaderSize);
      GetMem(BitmapImage,  ImageSize);
      trey
        GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);
        StretchDIBits(Canvas.Handle,
                      DestRect.Left, DestRect.Top,     // Destination Origin
                      DestRect.Right  - DestRect.Left, // Destination Width
                      DestRect.Bottom - DestRect.Top,  // Destination Height
                      0, 0,                            // Source Origin
                      Bitmap.Width, Bitmap.Height,     // Source Width & Height
                      BitmapImage,
                      TBitmapInfo(BitmapHeader^),
                      DIB_RGB_COLORS,
                      SRCCOPY)
      finally
        FreeMem(BitmapHeader);
        FreeMem(BitmapImage)
      end;
      Application.ProcessMessages;
    end {PrintBitmap};
    @+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Magdani
    Bonjour,

    Ci cela peut t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    XPixelsParPouce, YPixelsParPouce : integer;
     
    // Pour imprimer au millimetre sur la feuille
    function MPX(Millims : integer) : integer;
      begin
      XPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
      result := trunc(Millims/ (25.4/XPixelsParPouce));
      end;
     
    function MPY(Millims : integer) : integer;
      begin
      YPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
      result := trunc(Millims/ (25.4/YPixelsParPouce));
      end;
     
    // pour supprimer la marge
    function NIPX : integer;
     begin
      result := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
     end;
     
    function NIPY : integer;
     begin
      result := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
     end;
     
    // pour imprimer en milimètres 
    Printer.Canvas.TextOut(MPX(10)- NIPX, MPY(10)- NIPY,'Delphi');

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Magdani
    J'ai oublié : ces fonctions permettent d'utiliser n'importe quelle imprimante

  8. #8
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Super,

    un grand merci à vous!
    Et très bonnes fêtes de fin d'année.
    [Il était une fois Delphi ....]


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script pour redimmensnionner image et taille maxi image
    Par fabien14 dans le forum Langage
    Réponses: 21
    Dernier message: 15/09/2006, 17h21
  2. Réponses: 9
    Dernier message: 01/06/2006, 08h01
  3. [Image]Vérifier taille image lors d'upload FTP
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 10/09/2004, 01h10
  4. Impression d'image bmp
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2002, 09h38
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

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