RESOLUTION IMAGE AVEC TWAIN [Résolu]

Signaler
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Bonjour,

J'ai déjà posé une question similaire il y a quelques mois mais les réponses ne convenaient pas et je n'ai à ce jour trouvé aucune réponse sur Internet malgré mes nombreuses recherches.

J'explique mon problème :

J'utilise l'interface TWAIN pour acquérir des images avec le code (simplifié) ci-dessous :
   'Selection de la source
   r = TWAIN_SelectImageSource(Me.hWnd)
   'Lancement du scan
   r = TWAIN_AcquireToClipboard(Me.hWnd, 0)
   'Recupération de l'image
   Set imgPreview.Picture = Clipboard.GetData(vbCFDIB)

Le problème est que je n'arrive pas à récupérer la résolution de l'image qui vient d'être scannée.
Sachant que lorsque je demande à imgPreview la résolution de l'image qu'il affiche, j'obtiens 96DPI soit la résolution de l'écran.


- Peut-on récupérer la résolution dans le vbCFDIB ?
- Peut-on récupérer la résolution utilisée dans l'interface TWAIN ?
- Existe-il un controle autre que Image ou PictureBox et qui conserve la résolution de l'image au lieu de convertir en 96DPI ?

Merci d'avance
Bonne prog
++

8 réponses

Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Bonjour,

J'ai depuis résolu le problème. Si tu codes en .net tu peux regarder ma source :
http://www.vbfrance.com/codes/OPENTWAIN-NET_46699.aspx

Bonne prog
++
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
Salut,
96 dpi c'est bien la résolution par défaut sur l'écran (pour l'imprimant c'est 72 dpi)
"je demande à imgPreview la résolution de l'image"
c'est quoi imgPreview et comment as tu fait pour demander la résolution ?
de toute façon se sera toujours 96 dpi (bien que chaque écran a sa propre résolution en fonction de sa taille)

pour avoir la taille de l'image et si imgPreview est un PictureBox::
voit du côté de imgPreview.Picture.Width  et imgPreview.Picture.Height
mais faudra convertir du vbHimetric en vbPixels

Daniel
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Salut Gobillot,

Merci pour ton intervention.

En fait, imgPreview.Picture.Width et imgPreview.Picture.Height me donne la 'taille' de l'image et non sa 'résolution' (en PPP).
Ce qu'il me faut c'est la résolution exprimée en PPP ou DPI (celle qui a été selectionnée dans l'interface TWAIN).

<hr />
"c'est quoi imgPreview et comment as tu fait pour demander la résolution ?"
<hr />
imgPreview est de type Image (j'ai également essayé une PictureBox mais sans succès)
Sinon, pour récupérer cette résolution, j'utilise une API de GDI+ mais sans succès car j'obtiens 96 en résultat.

Merci encore
Bonne prog ++
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
Re,

ok, si l'API dit que la résolution est 96 ppp c'est qu'elle est bien de 96, si je vérifie en passant par les propriétés de l'explorer, la plupart de mes images sont en 96, sauf quelques unes
en fait c'est faux, 96 ppp est par défaut, si la résolution dans l'image est à zéro, la résolution sera considérée comme étant à 96 par défaut, je dis bien sur l'écran parce que Windows considère que la résolution d'un écran est à 96, ce qui n'est pas vrai car chaque écran a sa propre résolution (la mienne est par exemple de  de 86x86)
mais cela ne joue absolument pas, quelle que soit la résolution de l'image, elle sera affichée de la même façon sur l'écran, les pixels restant les mêmes.
pour l'imprimante c'est une autre histoire, elle sera considérée par défaut à 72 dpi, et ça joue sur la taille de l'image imprimée.
cette résolution se trouve dans le fichier au même titre que la taille, mais pas au même endroit, et de façon différente suivant le format (bmp, jpg, png, ...) et souvent elle se trouve à zéro, ce qui doit être ton cas je pense, et  que ça doit jouer que sur la taille de ton image qui doit être plus ou moins grande suivant la résolution du scanner mais qui ensuite reste pareille (c'est pas clair ? l'image est plus grande mais reste  à 96 ppp)
on peut changer la résolution d'une image, il suffit de savoir où elle se trouve dans le fichier, et avant d'imprimer, une petite modif du fichier et on peut avoir l'image imprimée avec la taille exacte que l'on veut, c'est le seul cas qui justifie la modif (sinon je vois pas)

Daniel
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
ReRe,

Merci pour ces précisions. Tu es dans le juste, je souhaite imprimer les images scannées, non pas sur une imprimante mais dans un fichier, mais cela revient au même, l'image doit conserver sa taille d'origine.

J'ai effectivement pensé à utiliser l'API de GDI+ qui me permet de modifier la résolution d'une image, mais le problème reste entier : avant d'attribuer une valeur, il faut que je connaisse cette valeur

Aurais-tu une idée ?

Merci encore
Bonne prog ++
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
je peux te dire pour un fichier bmp
en le bidouillant directement en binaire
en position 26 et 2A (en hexa en commençant à zéro) sur 4 caractère en Long

26  80 0C 00 00    ' résolution X
2A  80 0C 00 00   ' résolution Y
valeur Long &HC80 --> 3200 pixels par mètre soit 32*2..54 81 dpi
avec ça on connait la taille de l'image imprimée (672 pixels / 32 --> 21 cm juste pour un format A4)

Daniel
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Hum,

Malheureusement cela ne conviendra pas, je sais également récupérer la résolution d'un BMP. Le problème est que je n'en ai pas. Ou bien je peux en avoir un en faisant en truc du genre imgPreview.SavePicture(.....) mais l'image est alors enregistrée avec une réso de 96DPI

Il faut vraiment que j'intervienne plus en amont.

Sinon, j'ai également pensé à utiliser autre chose que TWAIN, tant que cela reste simple pour l'utilisateur, que c'est gratuit d'utilisation et que cela ne me demande pas 3000 lignes de code derrière. Mais je n'ai rien trouver de ce genre donc je suis revenu au standard TWAIN.

Plus de 3 mois que je suis sur ce problème, commence à faire long
Mais je ne perd pas espoir.

Merci encore
Bonne prog ++
Messages postés
7
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
28 novembre 2012

J'ai le même souci que bouv, je souhaite connaitre la résolution en dpi de mon image que j'ai scanné.