aliquando
Messages postés4Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 5 mars 2007
-
4 mars 2007 à 10:17
aliquando
Messages postés4Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 5 mars 2007
-
5 mars 2007 à 00:03
Bonjour tout le monde!!
voilà je me retrouve confronté à un problême. Je devais obtenir un picturebox contenant une grande image et une petite image superposée et centrée.
Je n'ai pas trouvé le moyen de faire ça par code.
j'ai alors contourné ça avec ceci
Mainimage.image = ("c:\image.jpg")
MainImage.BackgroundImage = ("c:\background.jpg")
MainImage.SizeMode = PictureBoxSizeMode.CenterImage
ça me donne l'affichage de ce que je souhaite obtenir. mais mon but c'est d'enregistrer le résultat en jpg...
y'a-t'il un moyen de sauvegarder l'image + le background du picturebox en une seule image?
Sinon, comment en .net puis-je obtenir le même résultat? j'ai passé l'après-midi d'hier sur google us et je n'ai rien trouvé de tel...
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 4 mars 2007 à 13:44
Je crois que le meilleur moyen est de charger tes image dans deux controles différents, puis de placer un a un les points du de "image.jpg" dans l'image "background.jpg" grâce à image.point. Après normalement tu peux faire un SavePicture et ton problème est résolue
Reste à faire le code mais deux boucles devraient suffire:
Dim Horizontal as integer, Vertical as integer
For Vertical = 1 to image2.width
For Horizontal = 1 to image2.height
... 'Place le point de image2 dans image1
Next Horizontal
Next Vertical
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 4 mars 2007 à 15:09
Bonjour,
cette méthode est lente et n'est indispensable que si'il y a une couleur "transparente".
Si tel n'est pas le cas (superposition pure et simple); il me semble que l'utilisation de la fonction BitBlt de la librairie gdi32 est beaucoup plus rapide.
aliquando
Messages postés4Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 5 mars 2007 4 mars 2007 à 16:11
hum là j'ai fait des tests sur une petite image (pour mon projet c'est 1600x1200 alors que là je teste sur du 70x70) et c'est pas très rapide.
mais ça a le mérite de marcher.
le seul problême c'est pour centrer l'image.. mais ça se calcule, je me fais pas de soucis à ce niveau, il va juste falloir que je fasse chauffer un peu mes neurones.
pour la fonction Bitblt je ne la connais pas, je vais regarder cela attentivement car en effet il n'y a aucun effet de transparence à gerer
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 4 mars 2007 à 20:53
Salut VBGenesis
"Elle" marche à peu près de la même façon que la méthode PaintPicture deVB :
"Elle" transfère in bloc de bits d'une source vers une destination.
PaintPicture de VB l'utilise...
euh... d'une certaine façon, dirais-je, car PaintPicture en profite pour aller plus loin ..... jusqu'à StretchBlt...
Mais ici, nous n'avons besoin que de BitBlt et nous ne chargerons donc pas notre appli inutilement. (c'est l'avantage que représente l'utulisation directe des fonctions de l'Api de Windows : ne jamais se servir d'une pelle Pauclain pour seulement planter un rosier dans son jardin)
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 4 mars 2007 à 23:05
Salut jmfmarques! Merci pour l'explication!
J'ai trouvé un exemple (sur un site très interressent, il s'appelle VBFrance.com ) en fait c'est assez simple, suffisait juste de regarder
En tout cas je pense que aliquando a tout ce qu'il faut pour son code maintenant!
a+ et merci
VBGenesis
For Vertical = (PictureBox2.Height / 2) - (PictureBox1.Height / 2)
To (PictureBox2.Height / 2) + (PictureBox1.Height / 2) - 1
(j'avais fait comme ça)
Le problême c'est que le get pixel avait dans la boucle la même valeur que le setpixel (chose impossible vu que l'image1 est plus petite que l'image 2)
donc voilà ma boucle complête avec la modif
Dim myBitmap
As
New Bitmap(PictureBox1.Image)
Dim resultat
As
New Bitmap(PictureBox2.Image)
Dim Horizontal
As
Integer, Vertical
As
Integer
Dim pixcolor
As Color = myBitmap.GetPixel(Horizontal, Vertical)
Dim basehoriz
As
Integer = ((PictureBox2.Width / 2) - (PictureBox1.Width / 2))
Dim basevert
As
Integer = ((PictureBox2.Height / 2) - (PictureBox1.Height / 2))
For Horizontal = ((PictureBox2.Width / 2) - (PictureBox1.Width / 2))
To ((PictureBox2.Width / 2) + (PictureBox1.Width / 2)) - 1