begin process at 2012 02 11 02:55:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Mutimédia

 > 

Image & Vidéo

 > 

Impression d'une image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Impression d'une image

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,009 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales