/ / Redimensionnement d'image en C # - C # -4.0, png, jpeg, gif, tiff

Redimensionnement de l'image avec C # - C # -4.0, png, jpeg, gif, tiff

Les images fraîchement sorties du numériqueLes appareils photo ont souvent une taille supérieure à 2 ou 3 Mo, ce qui le rend difficile à transférer par courrier électronique et par d'autres moyens. Cela nécessite que l'image soit redimensionnée (en termes de taille de fichier et non de hauteur ou de largeur). Tout à fait similaire à MS Paint offrant une fonctionnalité de redimensionnement d'image. Je ne suis pas bien renseigné sur les théories des fichiers d'images. J'apprécierais que quelqu'un puisse m'indiquer les sources d'informations suivantes:

  • Théorie de l’image (comment fonctionnent les différents formats d’image jpeg, png, tiff, etc.)?

  • Comment l'image perd-elle sa netteté lorsqu'elle est redimensionnée? Y a-t-il des

  • Existe-t-il des bibliothèques gratuites .Net (j'utilise 4.0) pour cela? Si non, puis-je utiliser une bibliothèque utilisant l'interopérabilité com?

Merci beaucoup,

Réponses:

29 pour la réponse № 1

Le redimensionnement des images est une fonctionnalité directement intégrée au framework .NET. Il y a deux approches différentes:

  • GDI +
  • WIC
  • WPF

Voici une belle article de blog couvrant les différences entre eux.

Voici un exemple avec GDI +:

public void Resize(string imageFile, string outputFile, double scaleFactor)
{
using (var srcImage = Image.FromFile(imageFile))
{
var newWidth = (int)(srcImage.Width * scaleFactor);
var newHeight = (int)(srcImage.Height * scaleFactor);
using (var newImage = new Bitmap(newWidth, newHeight))
using (var graphics = Graphics.FromImage(newImage))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
newImage.Save(outputFile);
}
}
}

8 pour la réponse № 2

J'ai utilisé l'exemple fourni par Darin Dimitrov, L'image était gonflée et occupait beaucoup d'espace disque (de 1,5 Mo à 17 Mo environ).

Cela est dû à une petite erreur dans la dernière ligne de code.

La fonction ci-dessous enregistrera l'image en tant que Bitmap (taille d'image énorme).

newImage.Save(outputFile)

La fonction correcte devrait être:

newImage.Save(outputFile, ImageFormat.Jpeg);

2 pour la réponse № 3

Imageresizer fonctionne bien. http://imageresizing.net/