按钮和提示框放大时,整体缩放会让边框与圆角一起变粗。九宫格方法把四角、四边和中心分开,让固定边框与可伸缩内部遵循不同规则。
源图按左、右、上、下固定边宽切成九块。目标尺寸不足以容纳两侧边框时,本例主动把尺寸抬到边框总和;四角大小保持,横边只横向拉伸,竖边只竖向拉伸,中心双向拉伸。
源尺寸[136, 101],边框[左,右,上,下][14, 10, 14, 7] 源横边界[0, 14, 126, 136],源纵边界[0, 14, 94, 101]
请求[20, 18],实际尺寸[24, 21],横边界[0, 14, 14, 24],纵边界[0, 14, 14, 21];按先行后列的九块宽高[[14, 14], [0, 14], [10, 14], [14, 0], [0, 0], [10, 0], [14, 7], [0, 7], [10, 7]],总面积504。
请求[24, 21],实际尺寸[24, 21],横边界[0, 14, 14, 24],纵边界[0, 14, 14, 21];按先行后列的九块宽高[[14, 14], [0, 14], [10, 14], [14, 0], [0, 0], [10, 0], [14, 7], [0, 7], [10, 7]],总面积504。
请求[154, 195],实际尺寸[154, 195],横边界[0, 14, 144, 154],纵边界[0, 14, 188, 195];按先行后列的九块宽高[[14, 14], [130, 14], [10, 14], [14, 174], [130, 174], [10, 174], [14, 7], [130, 7], [10, 7]],总面积30030。
请求[215, 129],实际尺寸[215, 129],横边界[0, 14, 205, 215],纵边界[0, 14, 122, 129];按先行后列的九块宽高[[14, 14], [191, 14], [10, 14], [14, 108], [191, 108], [10, 108], [14, 7], [191, 7], [10, 7]],总面积27735。
请求[210, 67],实际尺寸[210, 67],横边界[0, 14, 200, 210],纵边界[0, 14, 60, 67];按先行后列的九块宽高[[14, 14], [186, 14], [10, 14], [14, 46], [186, 46], [10, 46], [14, 7], [186, 7], [10, 7]],总面积14070。
请求[230, 54],实际尺寸[230, 54],横边界[0, 14, 220, 230],纵边界[0, 14, 47, 54];按先行后列的九块宽高[[14, 14], [206, 14], [10, 14], [14, 33], [206, 33], [10, 33], [14, 7], [206, 7], [10, 7]],总面积12420。
请求[200, 61],实际尺寸[200, 61],横边界[0, 14, 190, 200],纵边界[0, 14, 54, 61];按先行后列的九块宽高[[14, 14], [176, 14], [10, 14], [14, 40], [176, 40], [10, 40], [14, 7], [176, 7], [10, 7]],总面积12200。
前两组专门检查小于或恰好等于最小尺寸时的退化中心,其余组检查正常伸缩。目标范围中不应出现负宽度或负高度。
所有源分块应该刚好覆盖源图;所有目标分块应该刚好覆盖实际目标。中心宽或高为零时允许退化为空区域,不要除以零去计算缩放倍率。
建议先遮住结果,用本例原始输入独立完成一遍,再逐项对照。若出现差异,先找最早不一致的位置,检查索引从零还是从一开始、边界是否包含,以及比较或更新发生的先后。只比较最后一个数,往往无法分辨规则理解与计算步骤分别出了什么问题。
这种最小尺寸处理是本练习的明确选择,并非所有界面系统都如此。实际实现也可能压缩边框或裁切内容。比较截图前,应先确认采用了哪一种小尺寸规则以及像素对齐方式。
以便获取最新的优惠活动以及最新资讯!