Impression Photo JPG

cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007 - 28 juin 2007 à 15:12
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007 - 30 juin 2007 à 18:09
Bonjour à tous

J'imprime une Photo avec Printer.PaintPicture Image, 0,0sur du papier 10x15.

Le résultat obtenu n'est pas correct, l'image est grossie et n'apparaît que partiellement.
Auriez vous une solution pour corriger cette anomalie

Par avance merci.

10 réponses

jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 juin 2007 à 17:49
Bonjour,

Ben....
Utilise les paramètres de paintPicture en fonction des dimensions de ton image et de celles de ton objet Printer, des coordonnées du rectangle dans lequel, sur ton objet Printer, tu veux placer ton image, etc... (ce que tu ne fais pas là !!!) ! (vois l'utilisation de PaintPicture dans ton aide en ligne)

Pour rappel : syntaxe de PaintPicture :
object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode


 


(soit 8 paramètres possibles et à utiliser ...)

Exerce-toi d'abord sur une PictureBox en lieu et place de l'objet Printer. Celà te fera économiser du papier et de l'encre, tout en pouvant t'exercer.
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
28 juin 2007 à 19:06
   Cette réponse ne m'aide absolument pas. Des réponses comme ça, je sais faire. 
   Il va sans dire que je connais la syntaxe du paintpicture  et de toutes les instructions du Print. (Mon aide en Anglais ne m'a pas éclairé sur la façon d'utiliser ces instructions).

Si je pose cette question c'est parce que j'ai des difficultés à assigner correctement tous les paramètres qui ne se limitent pas uniquement  au paintpicture.

Ce que je souhaite c'est une réponse précise.

Par avance merci à celui qui pourras m'aider.
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 juin 2007 à 19:15
Mille excuses !
Ce que tu souhaites est le code précis dont tu as besoin en fonction de tes paramètres et ce n'est pas ma tasse de thé.
Alors :
Il n'y a absolument aucune différence de traitement à l'aide de PaintPicture entre l'objet printer et une PictureBox.
Les exemples d'utilisation de paintPicture ne manquent pas sur ce forum.


Tu en trouveras quelques uns dans chacune des sources deéposées par moi en matière de traitement des images.
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 juin 2007 à 19:16
Je voudrais préciser ceci : mon aide est également en Anglais et c'est celle dont je me suis toujours servi. C'est d'ailleurs la seule aide que j'ai eue...
0

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

Posez votre question
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 juin 2007 à 19:47
Bon,

Un petit projet avec :

Une PictureBox Picture1 avec sa propriété Autosize = True
Une Picturebox Picture2, sans image

un bouton de commande command1

Code :

Private Sub Form_Load()
  Picture2.Width = Picture1.Width / 2
  Picture2.Height = Picture1.Height / 2
  Picture1.ScaleMode = 3
  Picture2.ScaleMode = 3
End Sub


Private Sub Command1_Click()
     Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, _
     0, 0, Picture1.Width, Picture1.Height
End Sub


Lance, clique sur Command1 et vois : auto explicite ...
J'appelle ton attention sur les scalemodes des 2 éléments : la Source et la destination : ils sont les mêmes, prends en bonne note.
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 juin 2007 à 22:49
Ca y est ?
Bien...
On va maintenant un peu compliquer les choses en modifiant le code du click de Command1 ainsi :

Private Sub Command1_Click()
     Picture2.PaintPicture Picture1.Picture, (Picture2.ScaleWidth - _
     Picture2.ScaleWidth / 3) / 2, (Picture2.ScaleHeight - _
     Picture2.ScaleHeight / 3) / 2, Picture2.Width / 3, Picture2.Height / 3, _
     0, 0, Picture1.Width, Picture1.Height
End Sub

Lance, clique sur command1 et vois ce qui est maintenant affiché dans Picture2...
Tu as maintenant un aperçu de ce que peut faire PaintPicture.
On aurait pu compliquer encore plus en n'envoyant dans Picture2 qu'une partie de Picture1 ! (il suffisait d'intervenir différemment sur les 2 seuls paramètres encore laissés à 0 dans ce dernier exemple (amuse-toi à le faire et tu verras...)
L'utilisation de chacun de ses paramètres est exposée parfaitement dans ton aide en ligne.
Si cela est encore quelque peu du chinois pour toi : fais donc différents essais... regarde le résultat.... tu en tireras normalement vite tes conclusions...
Bonne nuit
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
29 juin 2007 à 17:30
Comme cela est posé dans ma question, j'ai un problème dans mon logiciel pour imprimer une Photo .JPG sur du papier 10x15.


Si l'impression est correcte sur une imprimante CANON à part la marge que je n'arrive pas à supprimer,


l'Impression sur une imprimante HP PHOTOSMART avec la même source ne me donne pas le même résultat.


Au début, avant que je n'écrive à Hewlet-Packard, l'impression étais correcte sur du papier A4 mais s'avortais sur du 10x15 (avec le Message: Format ou Type de Papier invalide). Hp m'a suggéré de modifier la configuration de l'imprimante en passant par le Panneau de configuration. Maintenant, je n'ai plus le message d'erreur mais l'image est tronquée à l'impression. J'ai fais des essais avec et sans le CommonDialog pour sélectionner le papier 10x15 mais rien n'y change.


J'en conclus que je ne sais pas utiliser les Instructions Print. Print.Paintpicture et peut être d'autres que je ne connais pas. Je sais également que la marge Physique des imprimantes varie en fonction de la marque; il faut peut-être la tester ?... Mon code n'est donc pas standard et non transportable


Le problème n'est pas aussi simple que de réduire la taille d'une Picture. J'ai consulté plusieurs sources sur Internet, aucune ne m'a permis de résoudre ce problème.











<hr />
 Ci-dessous le code tel qu'exécuté. (Valeurs de: TAILLEPAPIERLONG 153 TAILLEPAPIERHAUT 102)Certaines instructions sont là pour les essais et les inutiles seront retirées.

<hr />Public Sub OnImprime0(Parm1 As Image)

Dim EspaceGauche, EspaceDroite As Integer

' Impression Directe

Printer.Orientation = 1

If Parm1.Width > Parm1.Height Then Printer.Orientation = 2

'Printer.PageSize = 9 ' Format A4

Printer.ScaleMode = 6 'Millimetres

Printer.PrintQuality = vbPRPQHigh

Printer.Print "";

'Printer.Copies = 1

'Printer.CurrentX = 0

'Printer.CurrentY = 0

EspaceGauche = 0
EspaceDroite 210 - TAILLEPAPIERHAUT 'TaillePapierHaut 102

'NAM.CommonDialog1.PrinterDefault = True

'NAM.CommonDialog1.ShowPrinter

Printer.PaintPicture Parm1, EspaceGauche, EspaceDroite, TAILLEPAPIERLONG, TAILLEPAPIERHAUT '--> Parm1, 0,108,153,102

Printer.EndDoc

<hr />      Je serais curieux de connaître la réaction de ce logiciel sur un autre type d'imprimante. Je suis prêt à l'envoyer avec un Mail en pièce jointe à celui qui acceptera de faire des essais. Pour celui que ça intéresse et qui veux bien le tester voici, les caractéristiques principales de cet outil:

      - Affiche les Photos sous forme de miniature - Les zoom ou les agrandies 
      - Deux techniques de transfert d'images de directorie à directorie (Par click sur une Photo Ou en glisser déplacé)

      - Possibilité d'assigner un Texte et un Index à chaque photo (Caractéristiques de chaque photo enregistrées dans une base DAO). La liste des Index est stockés sur la base. Ce peut-être par exemple un Prénom associé d'une date de naissance. Texte et Index sont affichées pour chaque photo. La Date de naissance associée à l'index permet grâce à la date de prise de vue, d'afficher, l'age de la personne au moment ou elle a été photographiée.

      - Fonction de Recherche sur le FileName de la Photo, l'Index, le Texte, la Date de prise de vue la Période Eté Automne Hiver Etc....

      - Fonctions de Sauvegarde sur CD (Sauvegarde uniquement des Photos nouvellement entrées dans l'outil) 
      - Fonctions de Restauration utilisable en cas de reformatage du disque dur. (Recharge la Base de données, génère les directories et restaure les photos dans leurs directories) 
      - Pour les boites de CD, Impression de plaquettes comportant une image et le N° du CD

      - Etc....................;

- Est donné avec le package un de mes utilitaires qui permet d'afficher et mettre à jour les tables enregistrées dans des bases DAO

A VERIFIER: Les sources de L'outil et de l'utilitaire ont été enrichis d'instructions avec un programme que j'ai développée et qui permet à n'importe quelle application de s'afficher correctement quelque soit la résolution de l'écran. (Sous toutes réserves car testé uniquement sous 2 résolutions différentes.)

<hr />
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
29 juin 2007 à 17:47
grrr... j'ai pas l'imprimante pour tester, dommage (surtout pour quelqu'un qui bosse dans l'editique^^)

regarde les valeurs posisbles autres que A4, pour le papier...
PrinterObjectConstants

(les vbPRPS*)

je pense nottament à vbPRPSUser et a jouer, ensuite avec Printer.Width et Printer.Height

a part cela, je te confirme que chaque modèle d'imprimante a ses propres marges physiques

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
30 juin 2007 à 09:00
Bonjour Cpapy,

J'ai une suggestion pour toi (ne me tape pas dessus si elle ne te plait pas, s'il te plait)

1) utilisation de la fonction DeviceCapabilities de la librairie "winspool.drv" de l'API de Windows.
Cette fonction permet de déterminer les dimensions supportées (par l'imprimante choisie) de la surface imprimable.
2) distinguer les paramètres/papier passés à l'objet Printer de ceux (dimensions de ce que tu dessines sur l'objet Printer) que tu passes à PaintPicture et qui, eux, doivent être calculés en fonction des dimensions de la surface imprimable.
Voilà ! C'est ma suggestion pour rendre ton appli plus portable.
Fais-en ce que tu veux.
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
30 juin 2007 à 18:09
 
Bonjour les amis


Je tiens tout d'abord à vous remercier pour l'aide que vous essayez de m'apporter.


Je vais orienter mes recherches en fonction des suggestions que vous venez de me faire.


<hr />
Un petit remerciement tout particulier à JmfArques qui m'a déjà aidé et qui m'aidera certainement encore.
Je voudrais te dire que mon intention n'étais pas de t'agresser. Si tu as interprété mon texte comme étant agressif, je m'en excuse.


<hr />
Je fermerais cette parenthèse en disant: A une question posée, beaucoup de personnes souhaiteraient avoir les quelques instructions qui leur manque pour solutionner leur problème sans rechercher dans des Helps qu'il ne comprennent peut-être pas toujours. En ce qui me concerne, j'ai comme tout le monde une documentation en Anglais, malheureusement pour moi, j'ai de très grosses difficultés à comprendre les explications qui y sont données. De plus,je ne suis pas technicien, j'ai découvert par moi même ce langage avec un bouquin que j'ai acheté il y a peut-être 5 ans. Maintenant, j'en ai fait mon passe temps préféré.


Encore mille mercis.
0