使用RA8889芯片實現(xiàn)雙線性插值法圖片縮放
作者:Harchy 發(fā)表日期:2022-11-24 來源:菱致電子 瀏覽:
本文介紹如何使用RAIO控制芯片(RA8889等)對圖片進行縮放,其中介紹兩種方法:
(1)隔行插值法
(2)雙線性插值法
第一種方法基本操作方式是隔一行(或者隔一列)復制或者直接丟棄,這種方式在進行縮小時效果尚可,運行速度也很快,但在放大時,新行(或者新列)是取值相鄰行(或者相鄰列),因此放大后顯示效果會有較明顯的鋸齒。
第二種方法,則是相鄰行(或者相鄰列)按比例取值,算法在此就不展開說明,大家可自行在網(wǎng)上搜索研究。在縮小圖片時“雙線性插值法”和“隔行插值法”效果相近,下圖進行對比:
但在放大圖片時,“雙線性插值法”的新行(或者新列)是通過前后相鄰行(或者相鄰列)進行相關運算,從而像素色彩就會產(chǎn)生過渡效果,因此鋸齒問題可得到不錯的改善,下圖進行對比:
以上是實際顯示效果說明,那么如何實現(xiàn)?在瑞佑的液晶控制芯片比如RA8889上,我們可以很容易做到這些。這里分別提供兩個函數(shù):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從顯存讀取像素點的顏色,進行相應的運算后再將結(jié)果寫進顯存,指定好源地址和目的地址,以及坐標、圖片寬高。再簡單舉幾個放大的效果:
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的大小,可以看出圖片均勻過渡效果很好,并且不會出現(xiàn)鋸齒問題。
但使用該方法最大的缺點就是會消耗MCU的資源,實現(xiàn)方法是先讀取像素值然后再進行運算,再將運算結(jié)果寫回顯存,故速度較慢。
客戶可以根據(jù)實際需求選用適當?shù)姆椒ㄟM行縮放。如需更詳細代碼,請聯(lián)絡我司銷售人員獲取技術支持。
分享到: