窗口与逻辑大小居中计算
2024-12-09
17
0
如窗口大小为WinCX,WinCY,实际逻辑的为BaseCX,BaseCY的图像显示在窗口中。
输出xy分别为起始的偏移位置,scale为缩放比例
void GetScaleAndCenterPos(
int baseCX, int baseCY, //1920x1080
int windowCX, //848
int windowCY, //378
int &x, int &y,
float &scale)
{
double windowAspect, baseAspect;
int newCX, newCY;
windowAspect = double(windowCX) / double(windowCY);
baseAspect = double(baseCX) / double(baseCY);
if (windowAspect > baseAspect)
{
scale = float(windowCY) / float(baseCY);
newCX = int(double(windowCY) * baseAspect);
newCY = windowCY;
}
else
{
scale = float(windowCX) / float(baseCX);
newCX = windowCX;
newCY = int(float(windowCX) / baseAspect);
}
x = windowCX / 2 - newCX / 2;
y = windowCY / 2 - newCY / 2;
}