Impression d'une image [Résolu]

Oniria 297 Messages postés dimanche 14 mars 2004Date d'inscription 18 décembre 2014 Dernière intervention - 20 janv. 2008 à 11:45 - Dernière réponse : Oniria 297 Messages postés dimanche 14 mars 2004Date d'inscription 18 décembre 2014 Dernière intervention
- 20 janv. 2008 à 20:16
Bonjour,

J'aimerais savoir s'il existe une fonction rapide pour imprimer un TImage sur une imprimante tout en faisant une mise à l'échelle.
En effet, j'ai un petit logiciel qui posséde un TImage que j'aimerais imprimer.
La solution que j'applique est :

if FMain.PrintDialog1.Execute then
     begin

       Printer.BeginDoc;
       ech1:=Printer.PageWidth/FMain.ImageTrace.Width;
       ech2:=Printer.PageHeight/FMain.ImageTrace.Height;
       if ech1>ech2 then ech:=ech1 else ech:=ech2;
       Long:=trunc(FMain.ImageTrace.Width*ech);
       larg:=trunc(FMain.ImageTrace.Height*ech);
       for x:=0 to long-1 do
         begin
           x1:=trunc(x/ech);
           For y:=0 to larg-1 do
             begin
               y1:=trunc(y/ech);
               if (x1<FMain.ImageTrace.Width)
                  and (y1<FMain.ImageTrace.Height) then
                  Printer.Canvas.Pixels[x,y]:=FMain.ImageTrace.Canvas.Pixels[x1,y1];
             end;

         end;
       Printer.EndDoc;
     end;   

ech permet de faire la mise à l'échelle entre le TImage et l'imprimante.

Mon gros probléme c'est que si je ne fais pas de mise à l'échelle, j'imprime un timbre poste (ca peut être utile pour envoyer une lettre lol...) mais avec ma procédure, ca prend pas loin de 20 minutes pour imprimer mon image sur PDFCreator. L'impression est correcte mais pas très rapide.

Merci pour vos réponses...

Oniria
Afficher la suite 

4 réponses

Répondre au sujet
Oniria 297 Messages postés dimanche 14 mars 2004Date d'inscription 18 décembre 2014 Dernière intervention - 20 janv. 2008 à 20:16
+3
Utile
Bonsoir,

En tout cas, merci beaucoup pour le temps que tu as passé pour me répondre. J'ai appris une nouvelle fonction : ScanLine.

J'ai trouvé une fonction sympa pour ce que je voulais faire : StretchDraw. Elle s'occupe de tout, la mise à l'échelle de l'image dans une zone prédéfinie.

Ma fonction d'impression est la suivante :

var x,y,x1,y1,long,larg : integer;
    ech1,ech2,ech : real;
    rect : TRect;
begin
  if FMain.PrintDialog1.Execute then
     begin

       Printer.BeginDoc;
       ech1:=Printer.PageWidth/FMain.ImageTrace.Width; // echelle sur l'axe des abscisses
       ech2:=Printer.PageHeight/FMain.ImageTrace.Height;// echelle sur l'axe des ordonnées
       if ech1<ech2 then ech:=ech1 else ech:=ech2; // on choisit l'échelle la plus petite
       Long:=trunc(FMain.ImageTrace.Width*ech); // on défini la taille en longueur de l'image sur la page
       larg:=trunc(FMain.ImageTrace.Height*ech); // on défini la largeur de l'image sur la page
       rect.Top:=0; // rect défini la zone ou se retrouve l'image
       rect.Bottom:=larg;
       rect.Left:=0;
       rect.Right:=long;
       Printer.Canvas.StretchDraw(rect,FMain.ImageTrace); // on trace l'image
       Printer.EndDoc;
     end;
end;  

Avec cette procédure, le tracé ne prend que quelques secondes. D'ou un gain de temps énorme.

Merci pour tes réponse Cirec, c'est vraiment très sympa.

Oniria
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Oniria
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 20 janv. 2008 à 12:16
0
Utile
Salut,

Premièrement on attend toujours encore une réponse de ta part ici
ensuite tu reviens avec le même type de question ... donc attends-toi à avoir les mêmes réponses

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Oniria 297 Messages postés dimanche 14 mars 2004Date d'inscription 18 décembre 2014 Dernière intervention - 20 janv. 2008 à 19:07
0
Utile
Bonjour Cirec,

J'en conviens, je n'ai pas répondu ni accepté les réponses car les réponse ne me conviennent pas vraiment (le transfert doit prendre en compte un facteur de zoom de même qu'une région particulière de l'image source). Et le Scanline analyse une ligne compléte. Mais pour la copie dans l'image de destination, comment prendre en compte un facteur de zoom.

Dans le premier cas, je parlais d'un TImage, là, je parle du TPrinter. Je pense sincérement que je doit me planter quelque part car les logiciels de traitement d'image ne mettent pas autant de temps pour imprimer (même avec des adaptations de dimension de l'image à imprimer par rapport à la page). J'ai du louper quelque chose mais je ne vois pas quoi.

En tout cas merci.

Oniria
Commenter la réponse de Oniria
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 20 janv. 2008 à 20:02
0
Utile
La solution que je t'ai donné ici peut également s'adapter pour l'impression

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.