Я хочу записать функцию для уменьшения изображения для установки указанным границам. Например, я хочу изменить размер 2000x2333 изображение для вписывания 1280x800. Соотношение сторон должно сохраняться. Я придумал следующий алгоритм:
NSSize mysize = [self pixelSize]; // just to get the size of the original image
int neww, newh = 0;
float thumbratio = width / height; // width and height are maximum thumbnail's bounds
float imgratio = mysize.width / mysize.height;
if (imgratio > thumbratio)
{
float scale = mysize.width / width;
newh = round(mysize.height / scale);
neww = width;
}
else
{
float scale = mysize.height / height;
neww = round(mysize.width / scale);
newh = height;
}
И это, казалось, работало. Хорошо... казался. Но затем я пытался изменить размер 1280x1024 изображение к 1280x800 границы, и оно дало мне результат 1280x1024 (который, очевидно, не вписывается 1280x800).
У кого-либо есть какие-либо идеи, как этот алгоритм должен работать?
Обычно я смотрю на соотношение между исходной шириной и новой шириной, а также на соотношение между исходной высотой и новой высотой.
После этого уменьшите изображение до максимального размера. Например, если вы хотите изменить размер изображения 800x600 на изображение 400x400, соотношение ширины будет 2, а соотношение высоты - 1,5. Уменьшение изображения в 2 раза дает изображение 400x300.
NSSize mysize = [self pixelSize]; // just to get the size of the original image
int neww, newh = 0;
float rw = mysize.width / width; // width and height are maximum thumbnail's bounds
float rh = mysize.height / height;
if (rw > rh)
{
newh = round(mysize.height / rw);
neww = width;
}
else
{
neww = round(mysize.width / rh);
newh = height;
}