Traitement sur des images avec StretchBlt [Résolu]

Signaler
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007
-
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007
-
Bonjour à tous,

J'utilise Stretch... pour copier un morceau d'image 

StretchBlt   Destination  , 0, 0, Width, Height,      Source, 100, 100, Width, Height,      vbSrcCopy 

<hr />
StretchBlt   Picture1.hdc, 0, 0, width , Height,     Me.hdc, 200, 200, Width, Height     ,  vbSrcCopy

                   Cette instruction fonctionne correctement  mais ne correspond pas à ce que je souhaiterais faire

<hr />
Question:
     1) Je souhaiterais avoir comme source  une PictureBox  ( Est-ce possible)
     2) Je souhaiterais avoir comme source  une Imagebox     (Est-ce Possible)

Avez vous la réponse à mes questions et une éventuelle proposition à me faire.

Merci pour votre aide.

      

    

9 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
te suffit de remplacer le Me.hdc par ton picturebox.hdc tout simplement...

Par contre, pour le contrôle Image ce n'est pas possible : Il s'agit d'un contrôle static, il ne possède pas de handle de fenêtre, et donc à fortiori, pas de handle de DC !
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
Utilise le Screen.TwipsPerPixel pour faire la conversion
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

Bonjour Nicolas,

   Merci pour ta réponse. J'en profite pour te demander si tu as toujours ton guide des Api. Je l'avais rappatrié du temps de Progotop. Malheureusement, après avoir changé d'ordinateur il ne fonctionnais plus. J'ai peut-être
mal cherché sur internet mais le ne l'ai pas retrouvé.

   Connais tu un livre en Français qui donne la liste et la manière d'utiliser les API. J'ai cherché et je n'ai pas trouvé. Comme tu as la connaissance, tu devrais en écrire un.

   Il y a bien longtemps que je n'ai eu le plaisir de correspondre avec toi. Toujours à Bordeaux. !

Merci encore  pour ton aide.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
Salut jean ! Ca fait plaisir de te revoir (j'avais même pas fait attention que c'était toi qui avais posté !).

Toujours sur bordeaux, mais pour peu de temps : je vais aller sur niort d'ici 1 mois pour des raisons professionnelles.

Depuis la fermeture de ProgOtoP, POPAPI n'est plus téléchargeable sur le net, je le garde pour moi, et l'envoie à ceux qui le demande ;)

Pourrais-tu m'envoyer ton adresse email par mp afin que je t'envoie le POPAPI ?

Je ne connais pas de livres particuliers (surtout écrits en français pour le VB !), malheureusement la plupart des docs sont soit en anglais, soit pour le C++, soit les deux !
Va voir ces sites là, ils me paraîssent pas trop mal pour se faire une idée, bien que fait pour le langage C :
http://www.secretswindows.com/index.php?rubrique=API&page=./api/presentation.htm
http://bob.developpez.com/tutapiwin/

Une très bonne doc API française, mais malheureusement plus mise à jour (qui m'avait poussé à l'époque à faire mon POPAPI justement) :
http://docvb.free.fr/api.php

Je te contacte par mp dans la soirée pour prendre de tes nouvelles.
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

Complément d'informations




<hr />
StretchBlt   Destination  , Left , Top, Width, Height,      Source, Left, Top, Width, Height,      vbSrcCopy 
<hr />
Un complément d'informations pour ceux qui ne connaissent pas cet Api. En ce qui me concerne, J'ai cherché
longtemps avant de comprendre:

Je demande aux spécialistes de me corriger  si je me trompe.

   Les valeurs  Left  - top - Width et Height doivent être données en pixels.  Utilisez par exemple la propriété
ScaleMode = 3  avant de charger la valeurs de ces coordonnés.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
oui tout à fait : les API Windows travaillent toujours par défault en pixels ! A ne pas oublier !
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

Mon programme fonctionne maintenant correctement mais il y a quelque chose qui me chagrine.
<hr />
J'ai rajouté après le StretchBlt un Scalemode = 1  pour que le traitement qui suit fonctionne correctement.

Ce Scalemode = 3 me gêne .
Je souhaiterais rester en scalemode =1 et calculer toutes les valeurs (Left,Top,With et Heith)

Je dois donc convertir les valeurs Twips en Pixels et là je ne sais pas faire ou mal le faire.

Avez vous l'Api ou la formule miracle pour me dépanner.
Encore Merci.

<hr />
Me.ScaleMode = 3
Picture.ScaleMode = 3

Calcul Left - top - width  height  --> (EX: Width = Picture.ScaleWidth .....)

StretchBlt    Me.hwnd  , Left , Top, Width, Height,  Picture.Hwnd, Left, Top, Width, Height,      vbSrcCopy 

Me.scalemode = 1
<hr />
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

C'est tout bon !

Merci Nicolas. 
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

Encore une question et j'espère la dernière sur ce sujet.

<hr />
StretchBlt   Me.picture.hwnd  , Left , Top, Width, Height,  me.Hwnd, Left, Top, Width, Height,      vbSrcCopy 
<hr />
Après avoir affiché mon image sur la form,  je déplace sur cette dernière un objet Textbox. 

J'ai encore utilisé l'instruction ci-dessus pour sauvegarder Image et Textbox dans une PictureBox.

Le résultat obtenu n'est pas celui que j'attendais. Je pensais récupérer Image et textbox dans ma picture mais la recopie c'est faite en ignorant la Textbox .

Avez vous la solution pour recopier Image et textbox dans une PictureBox

Encore Merci