首页应用案例 › 第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

2024-01-17

目录

第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频

第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架

第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化

第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图

第五讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part1.内部字库

第六讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part2.外接字库

第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库

第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片

第九讲 单片机驱动彩色液晶屏 控制RA8889软件:认识显存并进行读、写、复制

第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

第十一讲 单片机驱动彩色液晶屏 控制RA8889软件:播放avi视频

第十二讲 单片机驱动彩色液晶屏 如何打包bin档

第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

常用的图像运算主要包括:复制、去底色、单色位图延展上色、淡入淡出这些功能,下面逐一进行介绍如何使用:
一、图像复制

API函数如下,__Chroma_表示透明色剔除功能:

**
void BTE_Memory_Copy(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H);

void BTE_Memory_Copy_Chroma_key(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Background_color,unsigned short X_W,unsigned short Y_H);

RA8889的代码是透明开放的,我们可以逐层进去看实际算法,也可以查看具体的寄存器操作,初步接触瑞佑的芯片可以先用用API即可,有兴趣的话可以进入底层查看代码,相当灵活。

我们进入一个API函数代码看看:

**
void BTE_Memory_Copy(

    unsigned long S0_Addr // Start address of Source 0

    ,

    unsigned short S0_W // image width of Source 0 (recommend = canvas image width)

    ,

    unsigned short XS0 // coordinate X of Source 0

    ,

    unsigned short YS0 // coordinate Y of Source 0

    ,

    unsigned long S1_Addr // Start address of Source 1

    ,

    unsigned short S1_W // image width of Source 1 (recommend = canvas image width)

    ,

    unsigned short XS1 // coordinate X of Source 1

    ,

    unsigned short YS1 // coordinate Y of Source 1

    ,

    unsigned long Des_Addr // start address of Destination

    ,

    unsigned short Des_W // image width of Destination (recommend = canvas image width)

    ,

    unsigned short XDes // coordinate X of Destination

    ,

    unsigned short YDes // coordinate Y of Destination

    ,

    unsigned int ROP_Code

    /*ROP_Code :

       0000b  0(Blackness)

       0001b  ~S0!E~S1 or ~(S0+S1)

       0010b  ~S0!ES1

       0011b  ~S0

       0100b  S0!E~S1

       0101b  ~S1

       0110b  S0^S1

       0111b  ~S0 + ~S1 or ~(S0 + S1)

       1000b  S0!ES1

       1001b  ~(S0^S1)

       1010b  S1

       1011b  ~S0+S1

       1100b  S0

       1101b  S0+~S1

       1110b  S0+S1

       1111b  1(whiteness)*/

    ,

    unsigned short X_W // X_W : Width of BTE Window

    ,

    unsigned short Y_H // Y_H : Length of BTE Window

)

{

    BTE_S0_Memory_Start_Address(S0_Addr);

    BTE_S0_Image_Width(S0_W);

    BTE_S0_Window_Start_XY(XS0, YS0);

    BTE_S1_Memory_Start_Address(S1_Addr);

    BTE_S1_Image_Width(S1_W);

    BTE_S1_Window_Start_XY(XS1, YS1);

    BTE_Destination_Memory_Start_Address(Des_Addr);

    BTE_Destination_Image_Width(Des_W);

    BTE_Destination_Window_Start_XY(XDes, YDes);

    BTE_ROP_Code(ROP_Code);

    BTE_Operation_Code(0x02); // BTE Operation: Memory copy (move) with ROP.

    BTE_Window_Size(X_W, Y_H);

    BTE_Enable();

    Check_BTE_Busy();

}

瑞佑的API是可以从函数名推测其功能的,有些函数名称包含了参数信息,跟据参数名称就可判断参数功能,具体的参数在API函数都有作了详细说明,实际写代码时可以再进入函数查询。

针对BTE_Memory_Copy这个函数,参数可分为五个部分,参考下方图解说明:

所有图像操作API函数都包括S0、S1和Des三部份。比如BTE_Memory_Copy_Chroma_key相比BTE_Memory_Copy只是换了一个参数Background_color,这个参数作用是复制时同时剔除这个背景颜色,其它功能都相近了。

二、图像延展

图像延展指的是把1bpp图像延展为16bpp图像。1bpp图片高度不限,宽度须为8的倍数。

当我们将1bpp写入显存时,实际显示出来图像看起来水平方向压扁了一样。通过BTE_Memory_Copy_ColorExpansion这个函数转换,数据为1转为前景色,数据为0会转为背景色,如果换作BTE_Memory_Copy_ColorExpansion_Chroma_key函数,则只将数据1转换为前景色,数据0不处理,即为透明色。这个功能在我们做图标、数字表盘是相当有用的功能!

图形延展API函数:

**
void BTE_Memory_Copy_ColorExpansion(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,unsigned long Background_color);

void BTE_Memory_Copy_ColorExpansion_Chroma_key(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color);

图形延展实际效果:

三、淡入淡出

淡入淡出是通过RA8889的硬件加速功能实现的,通过控制 alpha 值即可控制两张图片的明淡效果,这种功能如果采用单片机进行软件处理,那会占用相当大的资源,很难实用,而通过RA8889/RA8876可轻松实现该功能。

淡入淡出API函数:

**
void BTE_Alpha_Blending_Picture_Mode(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned char alpha);

淡入淡出实例演示:

https://live.csdn.net/v/359248

 

第十讲 THE END

				分享到: