Eh bien, sur la façon de le faire, il y a un matériau intéressant here le mai vous aider. A propos de la perte de qualité, si vous voulez dire la résolution, il n'y a pas moyen de réduire la taille d'une image, vous jetez des informations spatiales qui ne peuvent plus être reconstruites. Bien sûr, si vous utilisez une sorte d'interpolation, mais ce ne sera jamais la même que votre image originale.
Ce que vous pouvez faire est de stocker une version de chacun.
Voici le code obtenu à partir du lien et honnêtement, je pense que les 5 dernières lignes de code commençant à Bitmap b = new Bitmap (destWidth, destHeight); est suffisant pour résoudre votre problème.
private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width/(float)sourceWidth);
nPercentH = ((float)size.Height/(float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}