Масштабирование изображения, просто зная масштабный коэффициент, сохраняющий соотношение сторон

Хорошо, я знаю, что это звучит так, как будто это репост другого вопроса, но я не смог найти никого, кто бы задавал тот же вопрос, что и я, или, может быть, я ошибаюсь, потому что это не тот способ, как справиться с проблемой, но в любом случае здесь это происходит :

У меня есть входное изображение, скажем, HD 1920 * 1080, и я просто знаю масштабный коэффициент: скажем, 0,3 (30% от исходного размера).
Как рассчитать новый целевой размер, близкий к 30% от исходного, при сохранении соотношения сторон?
Другими словами, как точно изменить масштаб изображения до 30%?

Если это не имеет смысла, не могли бы вы рассказать мне о том, как масштабировать изображение, не зная размера цели и не зная масштабный коэффициент?

Спасибо

Ps: я использую C / C ++, но псевдокод в порядке

-1

Решение

Если ваш рост & ширина целые числа, вы можете просто сделать это …

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 с тем же коэффициентом, вы сохраняете исходное соотношение сторон.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]