Impression d'un bitmap : Page Blanche [Résolu]

- - Dernière réponse :  Utilisateur anonyme - 9 avril 2007 à 18:04
Salut à tous,

Je travaille actuellement avec le composant TGraphXY de Kénavo. J'ai besoin de pouvoir l'imprimer en noir et blanc, j'utilise donc ce code là :

procedure TForm1.Print_BtClick(Sender: TObject);
Var
Img:TImage;
BitMap:TBitMap;
BcCl,GdCl,Cl:TColor;
Rect:TRect;
begin
If not PrinterSetupDialog1.Execute then Exit;
BitMap:=TBitMap.Create;
BitMap.Width:=Graph.Width;
BitMap.Height:=graph.Height;
With Graph Do
  Begin
  BcCl:=BackColor;
  GdCl:=GridColor;
  Cl:=Color;
  BackColor:=ClWhite;
  GridColor:=ClBlack;
  Color:=ClBlack;
  Graph.PaintTo(BitMap.Canvas,0,0);
  BackColor:=BcCl;
  GridColor:=GdCl;
  Color:=Cl;
  End;
  try
    With Printer Do
      Begin
      Rect.Left:=(Width-BitMap.Width) Div 2;
      Rect.Right:=Rect.Left+BitMap.Width;
      Rect.Top:=(height-BitMap.height) Div 2;
      Rect.Bottom:=Rect.Top+BitMap.Height;
      Img:=TImage.Create(nil);
      Img.Picture.Bitmap.Assign(BitMap);
      While Img.Picture.Bitmap.Empty Do
      Application.ProcessMessages;
      BeginDoc;
      Canvas.StretchDraw(Rect,Img.Picture.Bitmap);
      EndDoc;
      Img.Free;
      End;
  Except
    Showmessage('Imprimante absnete ou autre erreur');
  End;
BitMap.Free;
End;

Malheureusement j'obtient une magnifique page blanche : Si quelqu'un a une idée du pourquoi du comment ?

Merci

@+
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
756
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
1
3
Merci
Ben ça alors !




TGraphXY








Je t'avouerai que je n'ai jamais cherché à les imprimer !
Et pi y en a des tartes o comcombr' qui ont coulé sous les ponts depuis.

et pi là je suis en vacances sans le moindre bout d'imprimante à porté de câble.

Bon courage

Ken@vo




<hr size="2" width="100%" />



Code, Code, Codec !






[%3C/body
]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Kenavo
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
2
3
Merci
Salut Francky,

Je ne connais pas TGraphXY, mais je vois plusieurs problèmes dans ton code :

1) dans with printer do... , tu utilises Width et Height : à remplacer par PageWidth et PageHeight.
2) ton code ne s'adapte pas à un bitmap plus grand que le nbpixels de la page (mais ce n'est peut-être pas nécessaire ?). 
3) pourquoi créer un TImage, alors qu'il suffit de faire : Printer.Canvas.StretchDraw(Rect, Bitmap); ?

A +
Thierry

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
2
3
Merci
Salut Francky.

Comme tu dessines sur le Canvas du Bitmap, j'ai fait le test suivant :

procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  with Bitmap do
  begin
     Width:= 300;
     Height:= 300;
     //
     Canvas.Brush.Color:= clBlack;
     Canvas.FillRect(Rect(0,0,Width,Height));
  end;
  with Printer do
  begin
     BeginDoc;
     Canvas.Draw(300,300,Bitmap);
     EndDoc;
  end;
  Bitmap.Free;
end;


Résultat : page blanche !!!


Si à l'endroit des //,  tu codes : PixelFormat:= pf24Bit; (ou pf32bit) ... tout marche bien.
Je suppose que l'explication est qu'une imprimante travaille en mode RGB et qu'il faut donc transformer le bitmap en niveaux de couleurs RGB.

A +
Thierry

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ThWilliam
0
Merci
Salut et merci pour vos réponses

@Kénavo : comme quoi il est pas démodé ton composant .

@Thierry : Pour PageWidth et PageHeight : problème de copier coller  autant pour moi .(toute facon, Printer.width n'existe pas il me semble).
Pourquoi utiliser un TImage plutot qu'un TBitMap : ben comme ca ne fonctionnait pas j'ai essayé de bidouiller.

En fait que cela soit un TImage ou TBitmap, la partie qui plante est la partie impression : si on "remplace"  Printer.Canvas.StretchDraw(Rect, Bitmap) par clipboard.Assign(Image1.BitMap) ou clipboard.Assign(Image1.Img.Picture)  cela fonctionne nickel : avec un coller on récupère bien l'image centrée comme il faut. Je pense qu'il y a un problème de refresh quelque part mais je ne vois pas ou et surtout pas pourquoi.

Je sais que l'impression des bitmap est délicate mais à ce point, je me doutais pas.

Merci à vous
Commenter la réponse de Utilisateur anonyme
0
Merci
Arfff pas bête ca : je n'y avais pas pensé du tout.

Merci Thierry : ca marche nickel

@+
Commenter la réponse de Utilisateur anonyme