九宫格界面拉伸怎样保住四个角:七种目标尺寸的九宫格边框(实例08)
按钮和提示框放大时,整体缩放会让边框与圆角一起变粗。九宫格方法把四角、四边和中心分开,让固定边框与可伸缩内部遵循不同规则。
先固定规则和输入
源图按左、右、上、下固定边宽切成九块。目标尺寸不足以容纳两侧边框时,本例主动把尺寸抬到边框总和;四角大小保持,横边只横向拉伸,竖边只竖向拉伸,中心双向拉伸。
源尺寸[119, 128],边框[左,右,上,下][22, 13, 13, 12] 源横边界[0, 22, 106, 119],源纵边界[0, 13, 116, 128]
把结果按步骤记下来
请求[31, 22],实际尺寸[35, 25],横边界[0, 22, 22, 35],纵边界[0, 13, 13, 25];按先行后列的九块宽高[[22, 13], [0, 13], [13, 13], [22, 0], [0, 0], [13, 0], [22, 12], [0, 12], [13, 12]],总面积875。
请求[35, 25],实际尺寸[35, 25],横边界[0, 22, 22, 35],纵边界[0, 13, 13, 25];按先行后列的九块宽高[[22, 13], [0, 13], [13, 13], [22, 0], [0, 0], [13, 0], [22, 12], [0, 12], [13, 12]],总面积875。
请求[223, 63],实际尺寸[223, 63],横边界[0, 22, 210, 223],纵边界[0, 13, 51, 63];按先行后列的九块宽高[[22, 13], [188, 13], [13, 13], [22, 38], [188, 38], [13, 38], [22, 12], [188, 12], [13, 12]],总面积14049。
请求[157, 152],实际尺寸[157, 152],横边界[0, 22, 144, 157],纵边界[0, 13, 140, 152];按先行后列的九块宽高[[22, 13], [122, 13], [13, 13], [22, 127], [122, 127], [13, 127], [22, 12], [122, 12], [13, 12]],总面积23864。
请求[105, 100],实际尺寸[105, 100],横边界[0, 22, 92, 105],纵边界[0, 13, 88, 100];按先行后列的九块宽高[[22, 13], [70, 13], [13, 13], [22, 75], [70, 75], [13, 75], [22, 12], [70, 12], [13, 12]],总面积10500。
请求[70, 139],实际尺寸[70, 139],横边界[0, 22, 57, 70],纵边界[0, 13, 127, 139];按先行后列的九块宽高[[22, 13], [35, 13], [13, 13], [22, 114], [35, 114], [13, 114], [22, 12], [35, 12], [13, 12]],总面积9730。
请求[254, 147],实际尺寸[254, 147],横边界[0, 22, 241, 254],纵边界[0, 13, 135, 147];按先行后列的九块宽高[[22, 13], [219, 13], [13, 13], [22, 122], [219, 122], [13, 122], [22, 12], [219, 12], [13, 12]],总面积37338。
前两组专门检查小于或恰好等于最小尺寸时的退化中心,其余组检查正常伸缩。目标范围中不应出现负宽度或负高度。
自己复核的办法
所有源分块应该刚好覆盖源图;所有目标分块应该刚好覆盖实际目标。中心宽或高为零时允许退化为空区域,不要除以零去计算缩放倍率。
建议先遮住结果,用本例原始输入独立完成一遍,再逐项对照。若出现差异,先找最早不一致的位置,检查索引从零还是从一开始、边界是否包含,以及比较或更新发生的先后。只比较最后一个数,往往无法分辨规则理解与计算步骤分别出了什么问题。
使用这个练习的边界
这种最小尺寸处理是本练习的明确选择,并非所有界面系统都如此。实际实现也可能压缩边框或裁切内容。比较截图前,应先确认采用了哪一种小尺寸规则以及像素对齐方式。
