Impression des images

cs_mecsympa Messages postés 18 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 20 octobre 2006 - 1 oct. 2004 à 21:47
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 9 déc. 2004 à 11:15
J'ai bien réussi à imprimer des images mais je me suis rendu compte que l'image change de taille quand on change les paramètre de l'imprimante (qualité d'impression). :sad)

Comment peut on faire avec delphi 4 pour avoir une image avec les même proportion une fois imprimé quel que soit la qualité d'impression choisi.

Merci :)

8 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
4 oct. 2004 à 08:32
Salut,

Qu'utilises-tu comme fonction pour mettre ton image dans le canvas du Printer ?

As-tu essayé Printer.Canvas.StretchDraw(MonRect,MonGraphic);
en calculant les coordonnées de MonRect d'après les valeurs Printer.PageWidth et Printer.PageHeight ?

Il est également possible de récupérer la définition en ppi de l'imprimante, mais c'est pas vraiment simple.

Ken@vo
____________________
Code, Code, Codec !
0
cs_mecsympa Messages postés 18 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 20 octobre 2006
5 oct. 2004 à 06:06
J'ai essayé et j'était content en mode brouillon et normale l'image sortait au dimension spécifié, mais dés que je passais en qualité supérieur l'image s'imprimait à environ 25% de ces dimensions sur une HP. Sur une lexmark c'est pire, à chaque changement de qualité l'image change de dimension. :-p
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
5 oct. 2004 à 07:56
Bien !
Et il ressemble à quoi ton code ?

Ken@vo
____________________
Code, Code, Codec !
0
cs_mecsympa Messages postés 18 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 20 octobre 2006
19 oct. 2004 à 21:51
désolé pour le retard, voici mon code :

Procedure TForm1.Imprime_DVD_Normal;
Var
DimX,DimY:integer;
R:Trect;

Const
Marge:Integer=25;
LongueurCoupe:Integer=50;

Begin
{On calcul les dimmension de l'image pour l'imprimante}
DimX:=round((18.3 * Scale)+Marge+LongueurCoupe);
DimY:=round((27.4 * Scale)+ Marge+LongueurCoupe);
{On crée une rgion de ses dimensions}
R := Rect(Marge+LongueurCoupe, Marge+LongueurCoupe,DimX,DimY);
{ début de l'impression }
Printer.BeginDoc;
{Imprime trait de coupe haut gauche}
Printer.Canvas.MoveTo(Marge+LongueurCoupe,Marge);
Printer.Canvas.LineTo(Marge+LongueurCoupe,LongueurCoupe + Marge);
Printer.Canvas.LineTo(Marge,LongueurCoupe + Marge);
{Imprime trait de coupe Droit}
Printer.Canvas.MoveTo(DimX,Marge);
Printer.Canvas.LineTo(DimX,Marge+LongueurCoupe);
Printer.Canvas.LineTo(DimX+LongueurCoupe,Marge+LongueurCoupe);
{Imprime l'image}
Printer.Canvas.StretchDraw(r,Image2.Picture.Graphic);
{Imprime trait de coupe bas gauche}
Printer.Canvas.MoveTo(Marge,DimY);
Printer.Canvas.LineTo(Marge+LongueurCoupe,DimY);
Printer.Canvas.LineTo(Marge+LongueurCoupe,DimY+LongueurCoupe);
{Imprime trait de coupe bas droit}
Printer.Canvas.MoveTo(DimX+LongueurCoupe,DimY);
Printer.Canvas.LineTo(DimX,DimY);
Printer.Canvas.LineTo(DimX,DimY+LongueurCoupe);

   Printer.EndDoc;	{ fin de l'impression }
End;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
20 oct. 2004 à 11:18
Ok , vu!

Ton problème vient de la variable Scale, qui doit être égale à PointsParCentimetre soit la définition de ton imprimante divisé par 2.54.
Le truc est de récupérer la définition dpi de l'imprimante.

J'ai réglé ce problème en copiant l'unité Printers dans une autre renommée MyPrinters et en rajoutant ces lignes


type
  TPrinter = class(TPrinter)
  private
    { Déclarations privées}
    .....
    function GetQuality : Short;
    procedure SetQuality(Value : Short);
  protected
    { Déclarations protégées}
    .........
  public
    { Déclarations publiques}
    ........
  published
    { Déclarations publiées}
    ........
    property Quality : Short read GetQuality Write SetQuality;
  end;

implementation

function TPrinter.GetQuality: Short;
begin
  GetPrinterIndex;
  if DeviceMode = 0 then RaiseError(SInvalidPrinterOp);
  result := DevMode^.dmPrintQuality;
end;

procedure TPrinter.SetQuality(Value: Short);
begin
  CheckPrinting(False);
  GetPrinterIndex;
  if DeviceMode = 0 then RaiseError(SInvalidPrinterOp);
  SetState(psNoHandle);
  DevMode^.dmPrintQuality := Value;
  DevMode^.dmYResolution := Value;
end;


Ensuite dans ton programme tu remplaces Printers dans la clause Uses, par MyPrinters, et tu ajoute la ligne

Scale := Printer.Quality / 2.54;

au début de ta fonction.
Tu obtiens alors, et quelque soit la qualité de ton imprimante, une image imprimée de 274 x 183 mm

En principe, il faudrait aussi calculer les variables Marge et LongueurCoupe de la même façon:

Marge := Round(0.2 * Scale); //2 mm
LongueurCoupe =:Round(0.3 * Scale); //3 mm


Et voilà, et comme disait Tante Jeannine "il faut toujours faire bonne impression !"

Ken@vo
____________________
Code, Code, Codec !
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
20 oct. 2004 à 11:36
Re,

Y a ça aussi (que j'ai eu plus de mal à retrouver)

{Récup des dpi de l'imprimante, et on les convertit en ppc(entimètre)}
ScaleX := GetDeviceCaps(Printer.Handle, logPixelsX) / 2.54;
ScaleY := GetDeviceCaps(Printer.Handle, logPixelsY) / 2.54;
{On calcul les dimmension de l'image pour l'imprimante}
DimX:=round((18.3 * ScaleX)+Marge+LongueurCoupe);
DimY:=round((27.4 * ScaleY)+ Marge+LongueurCoupe);


"il faut toujours faire bonne impression !"

Ken@vo
____________________
Code, Code, Codec !
0
for_hic Messages postés 1 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 8 décembre 2004
8 déc. 2004 à 12:39
J'ai bien réussi à imprimer des images mais je me suis rendu compte que l'image change de taille quand on change les paramètre de l'imprimant.que je peux faire.......
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
9 déc. 2004 à 11:15
Salut for_hic,
de quels paramètres tu causes ?

Ken@vo
____________________
Code, Code, Codec !
0
Rejoignez-nous