Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Impression d'une image [ Mutimédia / Image & Vidéo ] (Oniria)

dimanche 20 janvier 2008 à 11:45:55 | Impression d'une image

Oniria

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

dimanche 20 janvier 2008 à 12:16:45 | Re : Impression d'une image

cirec

Membre Club Administrateur CodeS-SourceS
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


dimanche 20 janvier 2008 à 19:07:23 | Re : Impression d'une image

Oniria

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

dimanche 20 janvier 2008 à 20:02:30 | Re : Impression d'une image

cirec

Membre Club Administrateur CodeS-SourceS
La solution que je t'ai donné ici peut également s'adapter pour l'impression

 
@+
Cirec


dimanche 20 janvier 2008 à 20:16:16 | Re : Impression d'une image

Oniria

Réponse acceptée !
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 discussion est classé dans : printer, ech, fmain, imagetrace, trunc


Répondre à ce message

Sujets en rapport avec ce message

Un bug dans Delphi 6 ? [ par Kane ] Je viens d'ecrire le code suivant sous delphi 6 pro et j'obtient un drole de resultat ! Avant que la feuille devienne progressivement transparente ell Pb hauteur lors d'une édition [ par birdyz ] Je dois réaliser une édition dans mon appli. Mon soucis est que je doit imprimer le contenu d'un champ memo. Voici le morceau de code censé géré l'ape Problème composant [ par Quinve ] Bonjour, j'essais de voir la conception d'un composant qui imprime les réultats d'une requète.J'ai insérer 2 propriétés et les résultats ne sont pas l BUG IMPRESSION DELPHI [ par exae ] J'ai un problème d'impression sous W98.Pic := TPicture.Create;Pic.LoadFromFile( 'c:\WINDOWS\monBmp.bmp' );Printer.BeginDoc;Printer.Canvas.StretchDraw( Problème impression [ par bouba ] Bonjour, voici le code dont je me suis servis pour tester l'impression d'une simple chaine.procedure TfrmAssistantAvance.Button1Click(Sender: TObject) conversion date [ par piscine ] bonjour, j'utilise delphi7les procedures stockées et sql server.ma requete en sql est la suivante : proc moy_score_total@mois datetime, @an datetimeas problème d'impression d'une form [ par emeraudes ] bonjour, je débute en delphi et j'ai chercher sur les forums comment imprimer. j'ai trouvé divers éléments mais aucun ne correspond a ce que je rec Impression d'images [ par cedricbi ] Bonjour,J'ai un petit bug (ou plutot gros) dans mon programme ! J'essaye d'imprimer des images. Avec plusieurs images sur la même page. Mais 1 fois su Imprimer un imageList [ par dugueclin ] Bonjour à tous,j'ai un problème lorsque j'imprime mon StringGrid: dans la procedure OnDrawCells du StrinGrid, si la ou les cellules de la colonne 8 so Recuperer imprimante selectionnee [ par Tank01 ] Bonjour,Je suis entrain d'implémenter dans un programme, une procedure qui doit lancer un impression. ( jusque la, tout va:d)Avant de lancer cette imp


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,842 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.