C# : Comment redimensionner l'image proportionnellement avec hauteur max
J'ai besoin de redimensionner mon image, proportionnellement, sans changer l'aspect ratio.J'ai le code pour redimensionner avec fixe en hauteur et en largeur, mais j'ai besoin de redimensionner l'image proportionnellement à la hauteur maximum(disons 600 pixels). Comment puis-je modifier le code pour l'adapter à mon besoin?
public static void Main()
{
var image = Image.FromFile(@"c:\logo.png");
var newImage = ScaleImage(image, 300, 400);
newImage.Save(@"c:\test.png", ImageFormat.Png);
}
public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
{
var ratioX = (double)maxWidth / image.Width;
var ratioY = (double)maxHeight / image.Height;
var ratio = Math.Min(ratioX, ratioY);
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(newWidth, newHeight);
Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
return newImage;
}
Veuillez fournir vos précieux pensées.
Quel est le problème avec ce code?
avec tout le respect dû , merci de passer par mon exigence. Ce code utilise max hauteur et la largeur maximale est alors que j'ai besoin proportionnelle de changer l'image de la dimension de maintien de la hauteur, seul un nombre maximum (disons 600).
Je ne sais pas quel est le problème, mais si je ne me trompe pas, votre code ne redimensionner l'image sans changer le ratio d'aspect. Pouvez-vous ajouter un exemple de ce à quoi vous vous attendez?
utilisation ratioY au lieu de ratio, pour le calcul de la newWidth et newHeigth
Oui, vous avez absolument raison, mais dans mon code, je l'ai passer une hauteur fixe les sna de la largeur de la ScaleImage méthode. Ce que j'ai vraiment besoin est de passer de la dimension avec une hauteur fixe, mais une somme proportionnelle à la largeur. EST-il possible de réaliser cela?
avec tout le respect dû , merci de passer par mon exigence. Ce code utilise max hauteur et la largeur maximale est alors que j'ai besoin proportionnelle de changer l'image de la dimension de maintien de la hauteur, seul un nombre maximum (disons 600).
Je ne sais pas quel est le problème, mais si je ne me trompe pas, votre code ne redimensionner l'image sans changer le ratio d'aspect. Pouvez-vous ajouter un exemple de ce à quoi vous vous attendez?
utilisation ratioY au lieu de ratio, pour le calcul de la newWidth et newHeigth
Oui, vous avez absolument raison, mais dans mon code, je l'ai passer une hauteur fixe les sna de la largeur de la ScaleImage méthode. Ce que j'ai vraiment besoin est de passer de la dimension avec une hauteur fixe, mais une somme proportionnelle à la largeur. EST-il possible de réaliser cela?
OriginalL'auteur user735647 | 2012-04-26
Vous devez vous connecter pour publier un commentaire.
Cela se sent presque facile et je sens que je suis en manque de quelque chose. De toute façon, n'est ce pas que faire l'affaire?
Ce que je dois ajouter à empêcher la mise à l'échelle une image que j'ai des crises au sein de la hauteur ou de la largeur, et c'est un des côtés est plus grande, juste de réduire la taille jusqu'à ce qu'il correspond à la zone nécessaire tout en gardant porpotions.
OriginalL'auteur gwiazdorrr
Utiliser la fonction suivante
Merci beaucoup. Laissez-moi essayer.
Je suis capable de redimensionner l'image en utilisant le code
OriginalL'auteur Imran Rizvi
Bien, la pensée à travers le processus:
si vous avez une image de 800 x 600 taille et souhaitez redimensionner à newWidth x 400 hauteur (en plus de toutes les respectifs newWidth sera), vous obtenez le ratio en divisant le newHeight (maxHeight dans votre cas) avec 600 et multiplier 800 avec ce ratio, droit?
Donc, dans ce cas vous avez besoin de changer maxWidth et maxHeight de paramètres facultatifs (dire 800 par 600) pour vous donner un peu de dynamisme et d'obtenir les éléments suivants:
J'espère que cette aide. Je n'ai pas tester, mais j'ai réécrit mon code VB, donc apparemment, ce devrait être ok...
Il y a aussi un ResizeStream méthode ici: http://forums.asp.net/t/1576697.aspx/1 que vous pourriez trouver utiles.
Si vous souhaitez conserver la qualité de l'image, vous pouvez utiliser le CompositingQuality et SmoothingMode, etc. les variables.
Pas de problèmes. J'espère que cela aide. Laissez-moi savoir si vous frappez un récif. Une autre chose: c'est basé sur la hauteur max, de sorte que vous voudrez peut-être consulter pour un else if (maxWidth != 800) et ainsi modifier la newWidth et newHeight en conséquence. Mais le lien que j'ai fourni est très pratique, de toute façon.
OriginalL'auteur army
100% Travaillé
OriginalL'auteur Zk Wave