首页应用案例 › 使用RA8889实现图片缩放

使用RA8889实现图片缩放

2022-10-04

本文介绍如何使用RAIO控制芯片对图片进行缩放,其中介绍两种主法:

(1)隔行丢弃法

(2)双线性插值法

第一种方法基本操作方式是隔一行(或者隔一列)丢弃,这种方式在进行缩小时效果尚可,运行速度也很快,但在放大时,新行(或者新列)是取值相邻行(或者相邻列),因此放大后显示效果会有较明显的锯齿。下方两图为采用此法进行缩放的实际效果:

第二种方法,则是相邻行(或者相邻列)按比例取值,算法在此就不展开说明,大家可自行在网上搜索研究。在缩小图片时和“隔行丢弃法”效果相近,下图进行对比:

但在放大图片时,这种算法会让新行(或者新列)与相邻行(或者相邻列)进行相关运算,从而色彩就会有过渡效果,因此可避免严重的锯齿,下图进行对比:

以上是实际显示效果说明,那么如何实现?这里分别提供两个函数:
**
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);

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);

图片要先放到显存中,然后MCU从显存读取像素点的颜色,进行相应的运算后再将结果写进显存,指定好源地址和目的地址,以及坐标、图片宽高。再简单举几个放大的效果:

以上两张源图都是5030点的大小,使用“双线性插值法”将图片放大到800480的大小,可以看出图片均匀过渡效果很好,不会出现锯齿问题。

但使用该方法最大的缺点就是会消耗MCU的资源,先读取像素值然后再进行运算,结果再写回显存,故速度较慢。

客户可以根据实际需求选用适当的函数进行缩放。如需更详细代码,请联络我司销售人员获取技术支持。

				分享到: