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

发布时间:2024年01月13日

单片机驱动TFT彩色液晶屏系列讲座

目录

第一讲 单片机最小系统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);

淡入淡出实例演示:

RA8889/RA8876淡入淡出演示

第十讲 THE END

了解更多信息:http://www.lcdvision.com.cn

文章来源:https://blog.csdn.net/weixin_43307086/article/details/135519445
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。