Copier une image d'une PictureBox vers une autre [Résolu]

Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 09:45 - Dernière réponse : Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention
- 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
Afficher la suite 

8 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 sept. 2005 à 09:55
3
Merci
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/

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 sept. 2005 à 10:17
3
Merci
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/

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 sept. 2005 à 12:48
3
Merci
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/

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 10:08
0
Merci
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
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 11:44
0
Merci
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
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 sept. 2005 à 11:52
0
Merci
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/
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 12:25
0
Merci
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
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 16:19
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.