pic1. 小朋友像素阵列!
理解了位图图片的基本概念之后,现在开始讨论缩放的问题。为了使问题简化,我们考虑更简单的情况:只有1行小朋友的时候,如下图所示:
pic2. 单行像素阵列!我们知道,每个小朋友都是有“宽度”的,即其所占空间的大小,记为d1(可记为d1=1),则七位小朋友占总的空间大小:D1=7*d1=7。
图像缩放,即在占据相同空间(D1=D2=7)的情况下,用5个(随便举的例子)小朋友实现排列,那么每个小朋友所占的空间大小就发生了变化:d2=D2/5=1.4。这样看来,每个小朋友都应该变胖了一些才对,请看下图:
pic3. 单行缩放!这样的效果,即把图像缩小成原来图像的5/7,只用5个像素点来表示之前7个点需要表示的数据。
理解这些之后,需要面临一个非常关键的问题了:下面的五位小朋友,应该怎样对它们进行颜色的选取呢?从上图我们可以发现,上下两列队伍已经对齐,下面这一列的每个小朋友,在横向上,都处在上面这一列两个小朋友之间,为了更加明确地表述,见下图:
pic4. 最临近关系?则,下面的小朋友的颜色,应该是上面左右两个小朋友之间进行选择!
算法一:最邻近插值!
顾名思义,和哪个小朋友更接近,就选择哪一个!即上图所示内容。可以看到,我们丢失了部分信息,但是整体的颜色,和原图像是基本相同的!
算法二:双线性内插值!
这个名称有点不好理解。我们暂且忽略其称呼,简单理解起来,即综合考虑左右两边的情况,按距离的远近进行综合取舍。具体情况见下图所示:
pic5. 左右逢源的选择!这样看来,所得到的新图形的颜色,和之前的图形之间,是不是还原度更高呢?并且连算法一中丢失掉的绿色,也部分地保留了下来。
这样得到的图形,也会更加地平滑。
这样,大家应该都明白算法的核心内容了吧?至于怎样用代码实现,以及选择什么语言更加方便,就见仁见智了!
至于最初28个小朋友,如果行数变成3行,经过变换之后的图形是怎样的呢?
用最简单的方式,讲述最深刻的知识结构!
欢迎关注!