SmallBasic(LitDev)屏幕缩放问题:如何实现16:9比例下视图一致平移适配
现有代码逻辑解释
你当前的计算逻辑是分别按桌面宽度/原窗口宽度、桌面高度/原窗口高度计算两个独立的缩放系数,直接拉伸窗口铺满全屏,再用固定除数做偏移:
distanceWidth / 2是把水平方向多出来的宽度两边均分,实现水平居中效果distanceHeight / 1.3是你调试出来的经验值,刚好能把内容移到你需要的位置,没有通用适配性。
16:9固定比例适配实现方案
要保持16:9比例不变形、视图完全一致,首先要统一两个方向的缩放系数,不能单独按宽高各自缩放,实现步骤如下:
- 先确认原窗口是标准16:9比例:
1080/607.5=1.777...=16/9,符合要求 - 取宽、高两个缩放系数的最小值作为统一缩放值,避免内容拉伸超出屏幕
- 按你需要的对齐规则计算偏移量即可,不需要依赖经验值调整
完整实现代码
' 原16:9窗口基础尺寸 gw = 1080 gh = 607.5 GraphicsWindow.Width = gw GraphicsWindow.Height = gh GraphicsWindow.Left = 0 GraphicsWindow.Top = 0 ' 获取桌面实际尺寸 dw = Desktop.Width dh = Desktop.Height ' 计算双向统一缩放系数,保持16:9比例不变 scaleX = dw / gw scaleY = dh / gh unifiedScale = Math.Min(scaleX, scaleY) ' 计算缩放后内容的实际宽高 scaledWidth = gw * unifiedScale scaledHeight = gh * unifiedScale ' 偏移量设置:需要左上角对齐直接设为0即可 panX = 0 panY = 0 ' 若需要居中对齐,替换上面两行为以下代码即可 ' panX = (dw - scaledWidth) / 2 ' panY = (dh - scaledHeight) / 2 ' 执行重定位,旋转角度固定为0 LDGraphicsWindow.Reposition(unifiedScale, unifiedScale, panX, panY, 0)
调整规则
如果需要微调内容位置,直接修改panX(水平偏移,正数向右、负数向左)和panY(垂直偏移,正数向下、负数向上)的数值即可,所有比例下的视图都会保持完全一致。
内容的提问来源于stack exchange,提问作者Caleb
相关产品推荐
相关产品推荐

