Проблема новичка в C # с переменными типами - PullRequest
1 голос
/ 26 марта 2010
int newWidth = 100;
int newHeight = 100;
double ratio = 0;

if (img1.Width > img1.Height)
{
    ratio = img1.Width / img1.Height;
    newHeight = (int)(newHeight / ratio);
}
else
{
    ratio = img1.Height / img1.Width;
    newWidth = (int)(newWidth / ratio);
}

Image bmp1 = img1.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
bmp1.Save(Server.MapPath("~/Uploads/Photos/Thumbnails/") + photo.PhotoID + ".jpg");

Я всегда получаю изображение с одинаковыми значениями высоты и ширины (100)
Я что-то не так делаю с преобразованием типов?

Ответы [ 3 ]

12 голосов
/ 26 марта 2010
ratio = img1.Width / img1.Height;

Ширина и высота - целые числа. Вы будете выполнять целочисленную математику для этих значений, прежде чем сохранять их в своем двойном. В целочисленной математике 150/100 - 1. 199/100 - 1. 101/100 - 1. Десятичных дробей нет. После вычисления значения затем оно будет сохранено в вашем двойном числе.

Приведите хотя бы одну сторону к удвоению, прежде чем выполнять вычисления.

ratio = img1.Width / (double)img1.Height;
1 голос
/ 26 марта 2010

Вы можете сказать:

ratio = img1.Width / (img1.Height * 1.0);

Чтобы гарантировать, что значение результата не будет усечено из-за целочисленной арифметики.

0 голосов
/ 26 марта 2010

Какой размер изображения? если ширина и высота всегда равны, то это имеет смысл.

newWidth = (int)(newWidth / ratio);  // this is newWidth = newWidth / 1 so it doesn't change.
...