Redimensionnement d'image

Résolu
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011 - 19 avril 2007 à 11:36
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011 - 19 avril 2007 à 16:36
Bonjour, voici ma question.

J'aimerai pouvoir redimensionner des images en vb.net en leur assignant une telle longueur et largeur, sans perdre de la qualité, et sans qu'il me déforme l'image.

Voici comment je fait :

Public
Function construitBitmap(
ByRef g
As Graphics,
ByRef resized
As Bitmap,
ByRef bm
As Bitmap)

'bm est le bitmap de mon image d'origine

'resized est un bitmap avec les nouvelles dimensionsg = Graphics.FromImage(resized)

'construit un objet graphic sur mon nouveau bitmapg.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver

g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic

g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality

'Dessine mon image dans mon nouveau bitmapg.DrawImage(bm,

New Rectangle(0, 0, resized.Width, resized.Height), 0, 0, bm.Width, bm.Height, GraphicsUnit.Pixel)g.Dispose()

End
Function

Cela fonctionne bien sauf qu'il me déforme l'image si les nouvelles dimension ne son pas proportionnée (logique). Je sais que je pourrais ne donner qu'une des deux mesures (longueur ou largeur) et calculer lautre en proportion, mais ce n'est pas cela qu'il me faut. En fait si je defini un X et un Y, je doi obtenir au final une image de taille X et Y et dedans ma photo bien proportionnée, et ce qu'il y a de trop jaimerai y mettre du blanc ou autre couleur (si possible pouvoir la choisir).

Donc si jai une image 120 * 50 et que je la veux en 80*60, 120 etait le plus a diminuer, mon image dorigine deviendrai qqch comme 80*33,33 et jaimerai du blanc au dessu et en dessou pour obtenir 80*60.

Est ce possible ? en vb.net sous visual 2003.

11 réponses

morickno Messages postés 117 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 26 juin 2007
19 avril 2007 à 15:22
J'ai mis une PictureBox (PictureBox1) sur ma Form1 et un Boutton (Button1), puis j'ai mis une image bidon dans la PictureBox1. Sur le click du boutton j'ai mis ça...

Ca me sauvegarde le contenu de ma PictureBox dans un jpg suivant le double des dimensions de l'image. A toi d'adapter suivant tes besions.

Private






Sub
Button1_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
Button1.Click



Me




.PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize




Dim
Bitmap_G

As
Graphics


Dim
Bitmap_B

As
BitmapBitmap_B =


New
Bitmap(

Me
.PictureBox1.Width * 2,

Me
.PictureBox1.Height * 2)Bitmap_G = Graphics.FromImage(Bitmap_B)

Bitmap_G.Clear(Color.White)

Bitmap_G.DrawString("Etat:",


New
Font("Arial", 10),

New
SolidBrush(Color.Black), 25, 25)Bitmap_G.DrawImage(


Me
.PictureBox1.Image,

CInt
((Bitmap_B.Width -

Me
.PictureBox1.Width) / 2),

CInt
((Bitmap_B.Height -

Me
.PictureBox1.Height) / 2))Bitmap_B.Save("C:\n.jpg", Imaging.ImageFormat.Jpeg)


End



Sub

A+
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 avril 2007 à 11:40
Bonjour,

Sous VB6 existe la méthode PaintPicture (tu as peut-être l'équivalent sous VB.Net)
Tu as de toutes manières la possibilité d'utiliser directement la fonction StretchBlt de la librairie Gdi32 de l'Api de windows.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 avril 2007 à 11:48
J'y pense !
Si tout celà te parait compliqué, mais que tu sais déjà réduire ta picturebox et ton image en en gardant les proportions,


rien ne t'empêche non plus de "relever" les dimensions de ta picturebox avant réduction et de les restituer après réduction ...
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
19 avril 2007 à 11:57
Je ne travail pas avec des pictures box, en fait, je vai simplement chercher des images dans le pc, je construit le bitmap dessu, jimpose des dimension, je construit un bitmap sur les nouvelle dimension, puis j'envoie le tout a ma fonction.

Ce que je pensais peut etre (cest peut etre la meme idee que toi) cest, je construit mon bitmap avec les tailles imposée, je cherche la plus grand des deux dimension de mon image dorigine, je lui impose sa nouvelle dimension et je calcul proportionellement lautre. (qui sera surement plus petit que sa dimension imposée) et je met le tout dans mon bitmap avec les taille imposée.

Mais sais pas encore trop comment le faire :D faut que je cherche un peu, et je sais pas si je peut dessiner une image dans un bitmap plus grand que l'image. et si oui, que fait il pour remplir lespace?

Peut etre remplir tout dabord le bitmap avec la couleur desirée, puis collé limage dedans. Mais je doit encore trouver comment faire.

Merci pour tes reponses.
0

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

Posez votre question
morickno Messages postés 117 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 26 juin 2007
19 avril 2007 à 12:01
J'ai fait quelque chose de similaire à ton besion.

J'utiliserai une 2eme picturebox qui serait dimensionné suivant la taille que tu souhaite, ensuite tu calcule la taille de l'image pour qu'elle reste proportionnelle dans ces nouvelles dimension, et enfin tu dessine cette image dans la 2eme picturebox. Tu peu ensuite sauvegarder la 2eme picturebox.

A+
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 avril 2007 à 12:05
"Mais sais pas encore trop comment le faire :D faut que je cherche un peu, et je sais pas si je peut dessiner une image dans un bitmap plus grand que l'image. et si oui, que fait il pour remplir lespace?"

1) mets ton image en mémoire (une stdPicture, par exemple)
2) rempli ton rectangle de la couleur désirée
3) dessine où et comme tu veux ton image dans le rectangle
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 avril 2007 à 12:06
Une stdPicture fait l'affaire, morickno (pas besoin d'une picturebox additionnelle).
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
19 avril 2007 à 12:17
Merci de votre aide
Je met le code dès qu'il est fait
0
morickno Messages postés 117 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 26 juin 2007
19 avril 2007 à 14:26
J'ai eu besion de sauvegarder un état au format jpg.

En fait j'ai une picturebox sur ma form. J'ai créé un bitmap d'une dimension de 200X100 par exemple. Je remplis de blanc mon bitmap. J'ai déssiné dessus, l'image de ma picturebox aux dimensionx 100X50 et aux positions 50X25 (pour quel soit centré). Je sauvegarde ensuite mon Bitmap et le tour est joué.

A+
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
19 avril 2007 à 14:45
tu veu bien me donner le code pour faire cela stp pcq jarrive pas trop xD
0
Syphou Messages postés 52 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 6 juin 2011
19 avril 2007 à 16:36
Super ça marche ;-) Merci beaucoup !!!!!!
0
Rejoignez-nous