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 :

Problème d'affichage de Canvas


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Points : 24
    Points
    24
    Par défaut Problème d'affichage de Canvas
    Bonjour,
    j'ai un soucis d'affichage quand je dessine sur un canvas
    avec Printer ou même sur une image.

    Je dois créer et envoyer par mail une image que je dessine et le résultat chez certains collègues n'est pas terrible je joins 2 images (une qui sort correctement sur mon poste, l'autre qui se redimensionne sur un autre poste)

    Voici le tableau OK :


    et Voici le tableau qui sort mal dimensionné (Plus gros, gras et mal cadré) :

    J'utilise
    Printer.Canvas.StretchDraw(R, ImageTemp.Picture.Graphic)
    ou
    ImageTempSave.Canvas.StretchDraw(R, ImageTemp.Picture.Graphic);

    et le résultat est le même.

    A votre avis, qu'est-ce qui peut merdouiller ???
    Serait-ce le PC ou le prog ?

    PS : Ceci est le fond du cadre mais le problème est rigoureusement identique avec du texte.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    StretchDraw copie une version dilaté/compréssé d'une image de taille L x M sur une image de taile I x N, ce qui donne parfois des résultats étranges

    d'ailleurs, il ne faut pas oublier qu'un Printer a une résolution 4 à 10 fois supérieur à celle d'un écran (printer 600 dpi, c'est du 4000x6000 loin d'un écran en 1280x1024)

    avec ta démo, je penserais que tu lui en demande de trop, regarde autour de Windows.BitBlt pour faire toi même tes proportions ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse,
    je vais voir ça.

    Mais une question me vient à l'esprit,
    pourquoi cela marche- il correctement sur la plus part des PC ?

    PS : Pourquoi le résultat est le même quand je dessine sur un BMP ?
    ImageTempSave.Canvas.StretchDraw(R, ImageTemp.Picture.Graphic);

  4. #4
    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

    je te deconseille stretchdraw pour redimensionner une image sur le canevas de l'imprimante cela va marcher sur certaines imprimantes mais pas sur toutes pourquoi aucune idée

    utilise plutot stretchdiblt pour redimensionner l'image sur l'imprimante

    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
     
    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);
      try
        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;
    end;

Discussions similaires

  1. Problème d'affichage
    Par mustang-gx dans le forum Bases de données
    Réponses: 8
    Dernier message: 26/01/2005, 22h54
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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