Copier une image d'une PictureBox vers une autre

Résolu
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 - 6 sept. 2005 à 09:45
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 - 6 sept. 2005 à 16:19
Bonjour tout le monde,



voilà j'ai un petit problème : je fais une impression écran et je colle
mon image dans une PictureBox (picture1) qui se dimensionne
automatiquement à la taille de l'image. Je voudrais copier l'image dans
une autre PictureBox qui a une taille fixe et je voudrais que l'image
contenue dans Picture1 soit redimensionner à la taille de Picture2
(taille que moi j'ai définie).



J'utilise le code suivant pour passer de l'une à l'autre mais ça ne fonctionne pas :



Form1.Picture2.PaintPicture Form1.Picture1, 0, 0, Form1.Picture2.Width, Form1.Picture2.Height

ça me marque : erreur d'éxécution : image incorrecte



est-ce que j'ai fait une erreur de syntaxe ou connaissez-vous un moyen
plus simple pour que mon image très grande (de la taille de l'écran)
qui est contenue dans Picture1 soit redimensionné à la taille de
picture2 et placée dans celle-ci ?



Merci pour votre aide à tous



Cédric



___________________________________________

Si tout seul on va plus vite, ensemble on va plus loin

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 sept. 2005 à 09:55
Essaye comme ceci :

Picture2.PaintPicture Picture1.Image, 0, 0, Picture2.Width, Picture2.Height, 0, 0, Picture1.Width, Picture1.Height

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 sept. 2005 à 10:17
De rien ;)



Petites précisions :

Le PaintPicture n'est pas forcément très rapide (par rapport à la
fonction de l'API StretchBlt par exemple), mais permet de
redimensionner une image sans ce soucier des ScaleMode de chaque image
(les API travaillant principalement en Pixels).

Ne pas oublier de faire un : Set Picture2.Picture = Picture2.Image si
par la suite tu veux travailler sur l'image (enregistrer, ou imprimer
par exemple).

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 sept. 2005 à 12:48
Dès que tu réduit une image (ou que tu l'agrandit), tu as forcément une
perte de qualité, soit parce que tu perds des informations sur les
pixels, soit parce qu'il y a une interpolation pour combler les pixels
manquant.



Le mieux pour éviter une trop grande perte de qualité, c'est de
redimensionner l'image proportionnellement, par exemple, 90 % de
l'image (donc 90 % de la largeur ET de la hauteur), car sinon, ton
image sera étirée !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 1
6 sept. 2005 à 10:08
Merci beaucoup DarKSidious




ça marche impeccable et ça aidera ceux qui veulent redimensionner une image à la taille d'une picturebox et pas l'inverse.



encore merci, @ bientôt



Cédric



_________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
0

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

Posez votre question
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 1
6 sept. 2005 à 11:44
dis-moi DarKSidious je voulais juste savoir un truc :

j'utilise le code ci-dessous pour faire une impression ecran et pour
balancer cette impression ecran dans ma picture1 (je ne comprend pas ce
code, mes connaissances en vb sont très limitées, mais en tous cas il
fonctionne). Je voulais savoir si tu penses qu'on peux augmenter la
résolution de ce screenshot pour obtenir une image de meilleure qualité
?



Voici le code que j'utilise :



Private Declare Function BitBlt Lib "gdi32.dll" ( _

ByVal hDestDC As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal hSrcDC As Long, _

ByVal xSrc As Long, _

ByVal ySrc As Long, _

ByVal dwRop As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long



Private Declare Function GetDC Lib "user32.dll" ( _

ByVal hwnd As Long) As Long



Private Const SRCCOPY As Long = &HCC0020


Public Sub ScreenShot()

Picture1.AutoRedraw = True

Picture1.Width = Screen.Width

Picture1.Height = Screen.Height

BitBlt Picture1.hDC, 0&, 0&, Screen.Width, Screen.Height, GetDC(GetDesktopWindow()), 0&, 0&, SRCCOPY

Picture1.Refresh

End Sub



crois-tu qu'il est possible de modifier ceci pour que la qualité
d'image soit meilleure (peu m'importe la taille que ça prendra sur le
disque, c'est pas un problème !!!)



Merci pour ton aide en tous cas



@ bientôt



Cédric



__________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 sept. 2005 à 11:52
Que veux tu dire par "augmenter la qualité d'image" ? La qualité d'image n'est pas au rendez-vous ?



Pourtant, il s'agit de la meilleure qualité que tu puisse obtenir
puisque la fonction de l'API Windows BitBlt ne fait que copier une
image, sans la redimensionner => pas de perte de qualité.



Après, si tu la redimensionne avec un PaintPicture, c'est normal que tu
obtienne une moins bonne qualité vu que tu touche au proportions entre
les pixels !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 1
6 sept. 2005 à 12:25
en fait voici mon problème :

je veux imprimer exactement ce que j'ai à l'écran donc pour ça je fais
une impression écran et je balance l'image dans une picturebox qui se
redimensionne automatiquement à la taille de l'image. Ensuite, si
j'imprime cette image telle qu'elle est, elle déborde de ma feuille A4
donc je la recopie dans une picturebox qui a la taille qu'il me faut
pour que tout rentre correctement sur une feuille pendant
l'impression... je suis obligé de perdre en qualité si je rétrécie
cette image ?

à moins que tu connaisses le moyen d'imprimer une image qui est trop
grande pour rentrer sur une feuille en théorie et pour que l'imprimante
se débrouille toute seule pour que ça rentre quand même... (oups, je
sais pas si je me fais bien comprendre)



merci pour ton aide en tous cas



Cédric



__________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
0
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 1
6 sept. 2005 à 16:19
Salut DarKSidious.

Tu as parfaitement raison et j'ai trouvé la parade : je dimensionne ma
picture en fonction de la résolution de mon écran. En effet, mon image
screenshot a une résolution qui est la même que la résolution de mon
écran donc, comme je suis en 1280x1024, il me faut un un rapport 5/4
entre largeur et hauteur de picture mais si mon prog est utilisé sur un
PC dont la résolution est en 800x600 alors il me faut un rapport 4/3.



Merci pour ton aide, tu fais parti des incontournables de vbfrance.com
et ça fait plaisir de pouvoir compter sur des gens comme toi.



@ bientôt



Cédric



__________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
0
Rejoignez-nous