IIUC эта проблема очень похожа на общую проблему максимизации изображения в данной прямоугольной области.
Предположим, что ваш экран W * H
пикселей (с W = 4 * H / 3
) и что изображение dx * dy
, тогда вы можете растянуть изображение, чтобы максимизировать его внутри экрана, используя масштабный коэффициент
sf = min(W / dx, H / dy)
потому что W / dx
будет масштабным коэффициентом, который делает изображение такой же ширины экрана, а H / dy
будет масштабным коэффициентом, который сделает его такой же высоты.
Если взять минимум из двух, то изображение будет полностью умещаться и ни один пиксель не выйдет за пределы экрана ... взяв максимум вместо этого, вы убедитесь, что экран будет полностью покрыт (частью) изображением и может быть полезно, если вы пытаетесь получить обои из изображения.
Если у вас есть коэффициент масштабирования, формулы, необходимые для центрирования, просты:
x0 = (W - dx * sf) / 2
y0 = (H - dy * sf) / 2
и вам просто нужно нарисовать изображение, масштабированное до sf
, начиная с позиции (x0, y0)
.