九宫格界面拉伸怎样保住四个角:七种目标尺寸的九宫格边框(实例26)
按钮和提示框放大时,整体缩放会让边框与圆角一起变粗。九宫格方法把四角、四边和中心分开,让固定边框与可伸缩内部遵循不同规则。
先固定规则和输入
源图按左、右、上、下固定边宽切成九块。目标尺寸不足以容纳两侧边框时,本例主动把尺寸抬到边框总和;四角大小保持,横边只横向拉伸,竖边只竖向拉伸,中心双向拉伸。
源尺寸[149, 96],边框[左,右,上,下][18, 16, 20, 18] 源横边界[0, 18, 133, 149],源纵边界[0, 20, 78, 96]
把结果按步骤记下来
请求[30, 35],实际尺寸[34, 38],横边界[0, 18, 18, 34],纵边界[0, 20, 20, 38];按先行后列的九块宽高[[18, 20], [0, 20], [16, 20], [18, 0], [0, 0], [16, 0], [18, 18], [0, 18], [16, 18]],总面积1292。
请求[34, 38],实际尺寸[34, 38],横边界[0, 18, 18, 34],纵边界[0, 20, 20, 38];按先行后列的九块宽高[[18, 20], [0, 20], [16, 20], [18, 0], [0, 0], [16, 0], [18, 18], [0, 18], [16, 18]],总面积1292。
请求[259, 191],实际尺寸[259, 191],横边界[0, 18, 243, 259],纵边界[0, 20, 173, 191];按先行后列的九块宽高[[18, 20], [225, 20], [16, 20], [18, 153], [225, 153], [16, 153], [18, 18], [225, 18], [16, 18]],总面积49469。
请求[175, 146],实际尺寸[175, 146],横边界[0, 18, 159, 175],纵边界[0, 20, 128, 146];按先行后列的九块宽高[[18, 20], [141, 20], [16, 20], [18, 108], [141, 108], [16, 108], [18, 18], [141, 18], [16, 18]],总面积25550。
请求[215, 83],实际尺寸[215, 83],横边界[0, 18, 199, 215],纵边界[0, 20, 65, 83];按先行后列的九块宽高[[18, 20], [181, 20], [16, 20], [18, 45], [181, 45], [16, 45], [18, 18], [181, 18], [16, 18]],总面积17845。
请求[257, 197],实际尺寸[257, 197],横边界[0, 18, 241, 257],纵边界[0, 20, 179, 197];按先行后列的九块宽高[[18, 20], [223, 20], [16, 20], [18, 159], [223, 159], [16, 159], [18, 18], [223, 18], [16, 18]],总面积50629。
请求[69, 104],实际尺寸[69, 104],横边界[0, 18, 53, 69],纵边界[0, 20, 86, 104];按先行后列的九块宽高[[18, 20], [35, 20], [16, 20], [18, 66], [35, 66], [16, 66], [18, 18], [35, 18], [16, 18]],总面积7176。
前两组专门检查小于或恰好等于最小尺寸时的退化中心,其余组检查正常伸缩。目标范围中不应出现负宽度或负高度。
自己复核的办法
所有源分块应该刚好覆盖源图;所有目标分块应该刚好覆盖实际目标。中心宽或高为零时允许退化为空区域,不要除以零去计算缩放倍率。
建议先遮住结果,用本例原始输入独立完成一遍,再逐项对照。若出现差异,先找最早不一致的位置,检查索引从零还是从一开始、边界是否包含,以及比较或更新发生的先后。只比较最后一个数,往往无法分辨规则理解与计算步骤分别出了什么问题。
使用这个练习的边界
这种最小尺寸处理是本练习的明确选择,并非所有界面系统都如此。实际实现也可能压缩边框或裁切内容。比较截图前,应先确认采用了哪一种小尺寸规则以及像素对齐方式。
