Хорошо, я знаю, что это звучит так, как будто это репост другого вопроса, но я не смог найти никого, кто бы задавал тот же вопрос, что и я, или, может быть, я ошибаюсь, потому что это не тот способ, как справиться с проблемой, но в любом случае здесь это происходит :
У меня есть входное изображение, скажем, HD 1920 * 1080, и я просто знаю масштабный коэффициент: скажем, 0,3 (30% от исходного размера).
Как рассчитать новый целевой размер, близкий к 30% от исходного, при сохранении соотношения сторон?
Другими словами, как точно изменить масштаб изображения до 30%?
Если это не имеет смысла, не могли бы вы рассказать мне о том, как масштабировать изображение, не зная размера цели и не зная масштабный коэффициент?
Спасибо
Ps: я использую C / C ++, но псевдокод в порядке
Если ваш рост & ширина целые числа, вы можете просто сделать это …
height = height * (int)(scaleFactor*100) / 100;
width = width * (int)(scaleFactor*100) / 100;
Кроме того, это решение также работает для int
но имеет больше смысла с переменными с плавающей точкой …
height = floor(height * scaleFactor);
width = floor(width * scaleFactor);
Или, независимо от типов переменных, вы можете просто позволить компилятору беспокоиться о том, как обработать округление …
height = height * scaleFactor;
width = width * scaleFactor;
…но с этим решением вы можете получить ошибки округления 1 к одной от одной платформы к другой. Это может не иметь значения в вашем случае использования, хотя.
Еще одна возможность, если ваш scaleFactor
само по себе int
и (в этом примере) составляет 30%, то scaleFactor
может быть значение 30
и вы бы просто сделали это …
height = height * scaleFactor / 100;
width = width * scaleFactor / 100;
Ключ в том, что если вы масштабируете оба ваших х & координаты y с тем же коэффициентом, вы сохраняете исходное соотношение сторон.
Других решений пока нет …