使用RA8889芯片实现双线性插值法图片缩放
作者:Harchy 发表日期:2022-11-24 来源:菱致电子 浏览:
本文介绍如何使用RAIO控制芯片(RA8889等)对图片进行缩放,其中介绍两种方法:
(1)隔行插值法
(2)双线性插值法
第一种方法基本操作方式是隔一行(或者隔一列)复制或者直接丢弃,这种方式在进行缩小时效果尚可,运行速度也很快,但在放大时,新行(或者新列)是取值相邻行(或者相邻列),因此放大后显示效果会有较明显的锯齿。
第二种方法,则是相邻行(或者相邻列)按比例取值,算法在此就不展开说明,大家可自行在网上搜索研究。在缩小图片时“双线性插值法”和“隔行插值法”效果相近,下图进行对比:
但在放大图片时,“双线性插值法”的新行(或者新列)是通过前后相邻行(或者相邻列)进行相关运算,从而像素色彩就会产生过渡效果,因此锯齿问题可得到不错的改善,下图进行对比:
以上是实际显示效果说明,那么如何实现?在瑞佑的液晶控制芯片比如RA8889上,我们可以很容易做到这些。这里分别提供两个函数:void Pic_Resize(unsigned long src_Addr,unsigned int src_Width,unsigned int src_Height,unsigned int src_x,unsigned int src_y,unsigned long des_Addr,unsigned int des_Width,unsigned int des_Height,unsigned int des_x,unsigned int des_y);
图片要先放到显存中,然后MCU从显存读取像素点的颜色,进行相应的运算后再将结果写进显存,指定好源地址和目的地址,以及坐标、图片宽高。再简单举几个放大的效果:
void Pic_Resize_Bilinear(unsigned long src_Addr,unsigned int src_Width,unsigned int src_Height,unsigned int src_x,unsigned int src_y,unsigned long des_Addr,unsigned int des_Width,unsigned int des_Height,unsigned int des_x,unsigned int des_y);
以上两张原图在液晶屏左下角,都是50*30点的大小,这里使用“双线性插值法”将它们分别放大到800*480的大小,可以看出图片均匀过渡效果很好,并且不会出现锯齿问题。
但使用该方法最大的缺点就是会消耗MCU的资源,实现方法是先读取像素值然后再进行运算,再将运算结果写回显存,故速度较慢。
客户可以根据实际需求选用适当的方法进行缩放。如需更详细代码,请联络我司销售人员获取技术支持。
分享到: