attention.
1 si tu fais Getthumbnail 250*200 tu va avoir une image compressée de 250*200 (pixelisée comme tu dis)
2 si tu fais new Size(250,200), ca refait une image 250 *200 soit exactement la meme chose
3 si tu la meme dans ta picture box, et que tu la met à strech, tu auras ton image gardant sa taille d'origine (en memoire si l'on peut dire) mais affichée 250*200 soit toujours le meme affichage.
prend photoshop et reduit une photo, tu auras le meme effet. pixelisé, ca l'est un peu car comme je te l'ai dit tu ne garde pas le meme ratio.
1,3333 pour une image 1024*768
1,25 pour une image 250*200
il faut la retravailler et faire des calculs pour qu'elle tienne dans ta picturebox sans etre deformée.cad, qu'elle prendra soit toute la hauteur, soit toute la longueur, mais une partie sera vide pour ne pas perdre de qualité.
voici le code C# d'une fonction que j'ai faite justement pour ne pas perdre de qualité:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #region Fonction pour afficher l'image au bon format
private void ResizeImage(string path)
{
// réglages des valeurs servant au calcul
int Lmax = IMG.Width;
// IMG est le nom de ma pictureBox
int Hmax = IMG.Height;
Image i = Image.FromFile(path);
// objet image à partir de l'image choisie
double ratio = (double) Lmax / Hmax;
// ratio de base à obtenir pour rentrer correctement dans la picturebox
double ratioImage = (double) i.Width / i.Height;
// ratio de l'image d'origine
double Flng = i.Width;
// largeur de l'image d'origine
double Fht = i.Height;
// hauteur de l'image d'origine
if (Flng > Lmax || Fht > Hmax)
// si l'image est plus grande d'une quelconque longueur
{
if (Flng > Lmax) // si la longueur est plus longue
{
if (1 > ratioImage) // et si la largueur est plus longue
{
Fht = Hmax; // la hauteur prend la hauteur maximale
if (Flng > i.Height)Flng = Fht / ratioImage; // calcul de la longueur
else Flng = Fht * ratioImage; // calcul de la longueur (bis)
}
else // seule la largeur est plus longue
{
Flng = Lmax; // la largeur prend la largeur maximale
if (Fht > i.Width) Fht = Flng / ratioImage; // calcul de la hauteur
else Fht = Flng / ratioImage;
}
}
else // seule la largeur est plus longue
{
Fht = Hmax;
Flng = Fht * ratioImage;
}
IMG.Image = Image.FromFile(path).GetThumbnailImage(Convert.ToInt32
(Flng),Convert.ToInt32(Fht),null, IntPtr.Zero); // j'en tire une miniature
}
else IMG.Image = Image.FromFile(path); // sinon j'affiche l'image de base
}
#endregion |
et comme tu vois, il faut faire plein de calcul pour obtenir une vrai miniature rentrant dans la picture box.
en espérant que ca puisse t'aider
Partager