按钮和提示框放大时,整体缩放会让边框与圆角一起变粗。九宫格方法把四角、四边和中心分开,让固定边框与可伸缩内部遵循不同规则。
源图按左、右、上、下固定边宽切成九块。目标尺寸不足以容纳两侧边框时,本例主动把尺寸抬到边框总和;四角大小保持,横边只横向拉伸,竖边只竖向拉伸,中心双向拉伸。
源尺寸[124, 100],边框[左,右,上,下][14, 17, 19, 16] 源横边界[0, 14, 107, 124],源纵边界[0, 19, 84, 100]
请求[27, 32],实际尺寸[31, 35],横边界[0, 14, 14, 31],纵边界[0, 19, 19, 35];按先行后列的九块宽高[[14, 19], [0, 19], [17, 19], [14, 0], [0, 0], [17, 0], [14, 16], [0, 16], [17, 16]],总面积1085。
请求[31, 35],实际尺寸[31, 35],横边界[0, 14, 14, 31],纵边界[0, 19, 19, 35];按先行后列的九块宽高[[14, 19], [0, 19], [17, 19], [14, 0], [0, 0], [17, 0], [14, 16], [0, 16], [17, 16]],总面积1085。
请求[190, 161],实际尺寸[190, 161],横边界[0, 14, 173, 190],纵边界[0, 19, 145, 161];按先行后列的九块宽高[[14, 19], [159, 19], [17, 19], [14, 126], [159, 126], [17, 126], [14, 16], [159, 16], [17, 16]],总面积30590。
请求[122, 99],实际尺寸[122, 99],横边界[0, 14, 105, 122],纵边界[0, 19, 83, 99];按先行后列的九块宽高[[14, 19], [91, 19], [17, 19], [14, 64], [91, 64], [17, 64], [14, 16], [91, 16], [17, 16]],总面积12078。
请求[250, 180],实际尺寸[250, 180],横边界[0, 14, 233, 250],纵边界[0, 19, 164, 180];按先行后列的九块宽高[[14, 19], [219, 19], [17, 19], [14, 145], [219, 145], [17, 145], [14, 16], [219, 16], [17, 16]],总面积45000。
请求[208, 149],实际尺寸[208, 149],横边界[0, 14, 191, 208],纵边界[0, 19, 133, 149];按先行后列的九块宽高[[14, 19], [177, 19], [17, 19], [14, 114], [177, 114], [17, 114], [14, 16], [177, 16], [17, 16]],总面积30992。
请求[75, 192],实际尺寸[75, 192],横边界[0, 14, 58, 75],纵边界[0, 19, 176, 192];按先行后列的九块宽高[[14, 19], [44, 19], [17, 19], [14, 157], [44, 157], [17, 157], [14, 16], [44, 16], [17, 16]],总面积14400。
前两组专门检查小于或恰好等于最小尺寸时的退化中心,其余组检查正常伸缩。目标范围中不应出现负宽度或负高度。
所有源分块应该刚好覆盖源图;所有目标分块应该刚好覆盖实际目标。中心宽或高为零时允许退化为空区域,不要除以零去计算缩放倍率。
建议先遮住结果,用本例原始输入独立完成一遍,再逐项对照。若出现差异,先找最早不一致的位置,检查索引从零还是从一开始、边界是否包含,以及比较或更新发生的先后。只比较最后一个数,往往无法分辨规则理解与计算步骤分别出了什么问题。
这种最小尺寸处理是本练习的明确选择,并非所有界面系统都如此。实际实现也可能压缩边框或裁切内容。比较截图前,应先确认采用了哪一种小尺寸规则以及像素对齐方式。