zoukankan      html  css  js  c++  java
  • (原创)高DPI适配经验系列:(二)按DPI范围适配

    一、前言

    一个软件,往往会用到位图资源,比如图标、图片、水晶按钮等。
    在使用了位图资源后,就不能对任意DPI都进行适配,因为这样适配的代价太大了。
    像Win10的缩放比例可以由100%-500%,如果全部适配的话,仅一个图标就是制作401个不同分辨率的版本,时间成本和空间成本上开销都太大了。同时,在很多DPI下,这401个图标当中有很多临近的图标的尺寸变化并不明显,甚至相同,这样无疑是浪费。
    所以,我们就需要以DPI范围为基础进行适配。

    相信看完的你,一定会有所收获!

    本文地址:https://www.cnblogs.com/lesliexin/p/14636355.html


    二、DPI计算公式与适配任意分辨率

    1,DPI计算公式

    第一篇中,我通过推理和归纳,总结出了DPI与缩放比例间的对应关系。
    但其实,DPI与缩放比例之间是有一个计算公式的,如下:
    DPI=缩放比例*96
    结果取整数,小数位四舍五入。
    示例:
    缩放比例为150%时,DPI=150%*96=144。
    这也是为什么会出两个缩放比例对应同一个分辨率。
    112%:DPI=112%*96=107.52,四舍五入后,DPI=108;
    113%:DPI=113%*96=108.48,四舍五入后,DPI=108;

    2,适配任意分辨率

    如果需要适配任意分辨率,那么尺寸就需要等比缩放。根据缩放比例进行计算比例,从100%开始,到500%结束。
    同时,因为分辨率是都是整数,所以要对计算后的结果进行四舍五入取整处理。

    在前言中,我举了个图标的例子,但实际上因为图标的尺寸很小,一般的图标是16*16,所以真正所需要制作的尺寸并达不到401个。
    以16*16分辨率的图标为例:

    从上图可以看出,在好多缩放比例下,图标的尺寸都是一样的,所以综合下来并达不到401个,但是也有60+,制作这么多图标,是极其消耗人力的。


    三、按DPI范围适配

    适配任意DPI是完美的,但是在实际应用中,这种太过耗费时间与精力。
    同时,在实现使用过程中,这些细小的变化对实际的使用影响并不大,而且整体界面尺寸的变化也不大。
    所以便可以按照“DPI范围”进行适配,不同范围的DPI值对应不同的缩放系数,这也是目前主流的高DPI适配方法。
    同时,因为在程序中,我们可以获取到的是DPI信息,而不是缩放信息,所以为了减小计算,是按照DPI去划分范围的,而不是按缩放比例去划分范围的。
    在选择适配范围时,有多种范围选择方法。这里提供一种我个人常用的范围分配方法:

    优点:
    1,适配完目前的100%~500%,每个图标只需要9份即可。
    如下:

    2,缩放系数以0.5递增,方便各种尺寸的计算。特别只要是偶数,计算后就会是整数,省去取整时精度损失。

    当然,以目前实际应用而言,300%的缩放已经很极限了,所以在此基础上还可以进一步的简化,以减少工作量。
    还可以在低缩放比例下再次细化,以到达更好的用户体验。


    四、总结

    世间安得双全法,所以大家可以根据自己的实际需要,来制定自己的适配方案。
    本文也只是一家之言,欢迎大家评论指正。

    -【END】-

  • 相关阅读:
    Cocos2d-x之绘制线条
    Cocos2d-x之绘制填充不规则多边形
    unittest
    检查代码错误和代码风格问题
    命名
    二进制数据
    python 后台运行
    分页
    编码
    格式化
  • 原文地址:https://www.cnblogs.com/lesliexin/p/14636355.html
Copyright © 2011-2022 走看看