Вы могли отредактировать соответственно размерную панель цвета, который Вы хотите на свои обои в GIMP и затем устанавливаете прозрачность выше. Я не знаю, существует ли более легкий путь или нет.
scale = min( dst.width/src.width, dst.height/src.height)
Это ваш подход, но он написан более четко.
Другим вариантом может быть масштабирование до максимальной ширины, а затем проверка, превышает ли масштабированная высота максимально допустимой высоты, и если да, масштабировать по высоте (или наоборот):
scale = (dst.width / src.width);
if (src.height * scale > dst.height)
scale = dst.height / src.height;
Я думаю, что это решение и короче, быстрее и проще для понимания.
destWidth / srcWidth
и destHeight / srcHeight
редактирования , он, конечно, такой же, как ваш метод, с перемещением частей формулы. Мое мнение таково, что это семантически яснее, но это всего лишь мнение.
Если все измерения не равны нулю, я бы использовал следующий код (который, по сути, соответствует вашему коду).
scaleFactor = (outerWidth / outerHeight > innerWidth / innerHeight)
? outerHeight / innerHeight
: outerWidth / innerWidth
Его также можно изменить, чтобы позволить любому измерению быть нулевым, если требуется.