前记:

       今晚和室友讨论了关于4K屏幕的问题。问题是4K屏幕是否会使游戏中的图片变大。我的意思是会变大,他的意思是不会变大,会变清晰。emmm,纯臆测感觉不太好。我先拿我知道的一些和做项目值积累的一些经验拿出来分析一下。同时也整理自己的一些经验。也得感谢室友给予的这次整理的机会。

     系统绘图的机制:

       我们先来探讨一下绘图的问题。我们先从一些比较原理的来讨论,现实中,大家操作的设备所能显示的,都是平面的显示屏。我们不讨论硬件的机制,只讨论代码中图片是怎么被绘制出来的。我们知道图片实质是就是一大堆颜色堆砌而成的。而三原色构成了所有的颜色,三原色的比例则可以形成相应的颜色。所以代码中,我们想绘制一张图片,实质上就是将一堆三原色对应的数据进行数据与设备的相应的处理。其实操作系统中,我么使用矩阵去存储三原色的数据。我比较熟悉Android系统,Android系统中,真正的一张图片是有俩个矩阵决定的。至于原理,我后面会补出来。
      可以这么认为:图片 = 三原色的数据 + 设备 + 三原色数据的分解与处理
    

     关于手机的相关知识:

        手机的分辨率:其实不用去解释这个名次的含义。大家也能从上面的绘图机制可以知道。手机屏幕实质上就是显示图片而已。你手机屏幕显示的任何东西实质是就是一图片而已。Android中叫drawable。
         那么图片既然由三原色来存储分析显示。那么手机屏幕肯定也会有相应的支持。
         一个像素点是是显示器上显示画面的最小发光单位,由三原色像素单位组成那么我们说的分辨率实质上指的是一英寸对应的区域所能存储的像素点的数目。
   用公式来说明就是:最小单位 = 三原色的数据存储单元
               手机分辨率 = 手机的屏幕尺寸 / 屏幕所有的三原色的数据存储单元。
   手机的分辨率是在出场时就既定不变的。

   PS:俩款手机屏幕一样大,但是它俩所含有的三原色的数据存储单元的总量不一样。那么分辨率就是不一样的。分辨率不一样会导致什么样的问题呢?
   来看下面的一个演示以及问题:
关于屏幕适配的问题
    上面的图片表达了一个硬件设备的条件:物理尺寸:400X800,屏幕里像素点是600,图片的物理尺寸是800X600,由400个像素点构成。
    实质上:手机中如果不允许用户拉升或者是移动图片。你所能看到的图片的大小应当是400X600。实质上一个物理的面积中只含有3/1600个像素点。而图片是1/1200个像素点。那么手机显示的这块区域中,这个图片是否显示异常?
    答案是不会显示异常,因为你的图片的分辨率实质上比手机的分辨率要低。所以你显示毫无任何问题。但是,如果图片的分辨率大于3/1600个像素点,图片就会发生显示异常。(不是特别大,不会特别明显)因为你的图片要求的单位存储的数目已经超过了手机本身的性能提供,就会出现丢失数据。
   如果硬件的设备条件改为:400X800,屏幕里的像素点是200,图片的条件不变。
   重新计算一下手机的分辨率:实质上一个物理的面积中只含有1/2400。图片的分辨率是1/1200。图片的分辨率是设备的分辨率的俩倍。也就是说你的手机根本存不了那么多的像素点。就会出现丢失数据。也就是说。同一张图片在分辨率为3/1600的设备中现实的效果是1/1200,而在1/2400中是显示为1/2400。图片发生了失真。现在如果要实现原来的倍率的效果,就需要将图片的分辨率修改至相同的倍率。但是操作系统显示UI界面的代码不会去压缩图片,也就是降低像素点,它会将图片拉升,也就是800X600的图片会被等纵横比的拉升到3.5倍,就会将图片的分辨率拉升到相同倍率的效果。那么图片会被拉升到2800X2100.但是一张图片被拉升了3.5倍。
  但是你的手机的显示区域根本没发生变化,也就是说,你看到的图片被拉大了3.5倍从而达到了原来的清晰度。
  我用Android里的相同大小分辨率的图片在不同分辨率的手机对比来比较这个结果。我上面的例子比较极端。
关于屏幕适配的问题关于屏幕适配的问题
左边的手机配置是:1080X1920,分辨率是xxhdpi
右边的手机配置是:480X800,分辨率是hdpi
图片的大小是360X640
但是明显右边的图片被拉升了。因为图片的分辨率是xxhdpi中显示正常的。但是在hdpi中为了显示正常(因为总的像素点已经不能满足,系统为了防止图片失真),图片被拉升已达到标准的分辨率。

    那么问题来了:4K的分辨率的显示屏和和1600X900的显示屏,同样的大小。显示一张分辨率是1600X900的图片,图片的大小一致,为了实现同样的效果,系统会怎么去适配?显示的效果是一样的。

   结论:

    就例如比较火的吃鸡这游戏来说,游戏效果全开,也就是游戏预顶的设置要绘制的图片像素点占满。
1.如果原游戏的分辨率最大的分辨率是1600X900,绘制要求的最大就是1600X900,4K的分辨率也只需要提供1600X900个像素点就可以了。所以显示效果是一样的。并不会变的更清晰。
2.如果原游戏的分辨率最大的分辨率是1800X1000,那么1600X900的屏幕为了保持用户可见的区域是固定的,同时保持不失真,就需要将被绘制的图像被拉升已达到1600X900的分辨率从而让游戏不失真。而4K则不需要做任何处理。在保护用户的可见的区域是固定的情况下,是比1600X900要清晰的。但是问题来了,图片被拉伸,其实就是变相的缩小了用户的可视区域。所以降低用户的电脑绘制的区域的像素点则可达到降低分辨率。所以可见吃鸡游戏的机子的适配机制也当时采取后者去处理的。
3.但是如果实质上游戏的最大分辨率比4K还要大。为了保持不失真,则必须降低像素点来达到分辨率降低。(前提是用户的可见区域是固定的)
4. 反过来无视用户的可见区域是固定的,则图片必须要被拉升。
 由此可以推断:市面上的游戏为了稳定已经规定化。采取的应当是第三点来进行对操作区域的界面绘制的开发

关于争论的结果:都不对,以及都对。因为没人知道做游戏的那些人是采取哪个方案去处理界面适配的,只有去实践才能知道,同时有台流弊的设备,你肯定能有个爽快的体验感是100%~

   总结:

         回顾了设备是如何进行绘制UI界面的的原理。以及整理了和统一了关于界面的绘制的机制。适配的问题的规划以及该如何处理。(PS:感谢与室友争论的这个问题引起了我的对于这类问题的反思与回忆and总结~)

相关文章: