历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2020年10月14日 | 为OLED屏增加GUI支持5:图片控件

2020-10-14 来源:eefocus

环境:


主机:WIN10


开发环境:MDK5.13


MCU:STM32F103



说明:

本文定义了图片控件。OLED屏是单色屏,所以本图片控件支持的是单色BMP图像。

将普通图像转换为单色图片可以用工具BmpCvt.exe。将转换后的BMP图像转换为hex文件,可以用Bin2C.exe。这两个工具都是emwin自带工具。



源代码:


转换后的hex文件再整理成如下的示例格式:


battery0.c



/**

* Copyright (c), 2015-2025

* @file battery0.c

* @brief 电池0格图标

* @author jdh

* @date 2015/11/9

* @verbatim 

* 说明:

* 1.图片格式为bmp

* 2.图片大小为17*13

* @endverbatim 

*/

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "res.h"

 

/*********************************************************************

* 全局变量

**********************************************************************/

 

const unsigned char Res_Battery0_Bmp[114UL + 1] = {

  0x42, 0x4D, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0xFF, 0x20, 0x00, 0x80, 0x04, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00,

  0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0x20, 0x00, 0x80, 0x00, 0x3F, 0xFF, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

 

/*************************** End of file ****************************/


gui_widget_image.h



/**

* Copyright (c), 2015-2025

* @file gui_widget_image.h

* @brief 图片控件头文件

* @author jdh

* @date 2015/9/8

*/

 

#ifndef _GUI_WIDGET_IMAGE_H_

#define _GUI_WIDGET_IMAGE_H_

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "gui_interface.h"

 

/*********************************************************************

* 数据结构

**********************************************************************/

 

/**

* @brief 图片控件数据结构

*/

 

typedef struct _Widget_Image

{

//x轴位置

uint16_t x;

//y轴位置

uint16_t y;

//水平尺寸

uint16_t xsize;

//垂直尺寸

uint16_t ysize;

//图片地址

const uint8_t *addr;

}*Widget_Image_Handle;

 

/*********************************************************************

* 函数

**********************************************************************/

 

/**

* @brief 创建控件text

* @param x:左上角x坐标

* @param y:左上角y坐标

* @param xsize:水平尺寸

* @param ysize:垂直尺寸

*/

 

Widget_Image_Handle gui_widget_image_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize);

 

/**

* @brief 设置图片

* @param addr:图片地址

*/

 

void gui_widget_image_set_bmp(Widget_Image_Handle handle,const uint8_t *addr);

 

#endif

 

 


gui_widget_image.c



/**

* Copyright (c), 2015-2025

* @file gui_widget_image.c

* @brief 图片控件主文件

* @author jdh

* @date 2015/9/8

*/

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "gui_widget_image.h"

#include "gui_2d_lib.h"

#include "stdlib.h"

#include "string.h"

 

/*********************************************************************

* 静态函数

**********************************************************************/

 

/**

* @brief 控件显示

* @param handle:控件句柄

*/

 

static void show(Widget_Image_Handle handle);

 

/*********************************************************************

* 函数

**********************************************************************/

 

/**

* @brief 创建控件text

* @param x:左上角x坐标

* @param y:左上角y坐标

* @param xsize:水平尺寸

* @param ysize:垂直尺寸

*/

 

Widget_Image_Handle gui_widget_image_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize)

{

Widget_Image_Handle handle;

//控件初始化

handle = malloc(sizeof(*handle));

handle->x = x;

handle->y = y;

handle->xsize = xsize;

handle->ysize = ysize;

return handle;

}

 

/**

* @brief 设置图片

* @param addr:图片地址

*/

 

void gui_widget_image_set_bmp(Widget_Image_Handle handle,const uint8_t *addr)

{

handle->addr = addr;

//显示

show(handle);

}

 

/**

* @brief 控件显示

* @param handle:控件句柄

*/

 

static void show(Widget_Image_Handle handle)

{

//清除区域

gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);

//显示

gui_draw_bitmap(handle->x,handle->y,handle->addr);

}


测试代码:



//电池图标

static Widget_Image_Handle Widget_Image_Battery;

Widget_Image_Battery = gui_widget_image_create(106,0,17,13);

gui_widget_image_set_bmp(Widget_Image_Battery,Res_Battery0_Bmp);


推荐阅读

史海拾趣

星海公司的发展小趣事

星海钢琴始终注重技术创新和品质提升。从引进国外先进技术到自主研发,星海钢琴在钢琴设计和制造方面取得了显著成果。公司特聘德国钢琴制造大师劳瑟·切尔先生为公司顾问,不断提升产品的工艺水平和音质表现。同时,星海钢琴还通过了ISO9001国际质量管理体系认证,确保每一架钢琴都符合高标准的质量要求。

Data Translation Inc公司的发展小趣事

Data Translation Inc公司成立于1973年,初期专注于数据采集和处理技术的研发。在成立初期,公司就凭借对技术的深刻理解和敏锐的市场洞察力,成功开发了一系列具有创新性的数据采集和处理产品。这些产品不仅满足了当时工业界对高精度、高速度数据采集的需求,还引领了整个行业的发展方向。随着技术的不断进步和市场需求的不断变化,Data Translation不断推出新产品,逐渐确立了其在数据采集和处理领域的领先地位。

GaN Systems公司的发展小趣事

GAIA盖亚电源深知质量是企业生存和发展的基石,因此一直将质量管理放在首位。公司通过了ISO9001 V2008等国际质量管理体系认证,并建立了完善的质量管理体系。在生产过程中,GAIA盖亚电源采用高标准流程和自动化制造能力,确保每一个产品都符合严格的质量标准。此外,公司还定期对产品进行严格的测试和验证,以确保其在实际应用中的可靠性和稳定性。

FutureWafer公司的发展小趣事

GAIA盖亚电源深知质量是企业生存和发展的基石,因此一直将质量管理放在首位。公司通过了ISO9001 V2008等国际质量管理体系认证,并建立了完善的质量管理体系。在生产过程中,GAIA盖亚电源采用高标准流程和自动化制造能力,确保每一个产品都符合严格的质量标准。此外,公司还定期对产品进行严格的测试和验证,以确保其在实际应用中的可靠性和稳定性。

鞍山圣罗佳(ASL)公司的发展小趣事

多年来,GAIA盖亚电源凭借其卓越的产品性能和专业的技术支持,赢得了众多知名客户的信赖和合作。这些客户涵盖了航空航天、军事、交通运输、工业自动化等多个领域。在与客户的合作过程中,GAIA盖亚电源不仅提供了高质量的产品和服务,还与客户共同研发了多项创新解决方案,帮助客户解决了许多技术难题。这些成功案例不仅彰显了GAIA盖亚电源的技术实力和市场竞争力,也为其在电子行业的发展奠定了坚实的基础。

Genisco Electronics公司的发展小趣事
设置完善的故障保护机制,如过载保护、短路保护、欠压保护等,确保在设备故障或异常情况下能够及时切断电源,防止事故扩大。

问答坊 | AI 解惑

大侠们帮忙啊

我手头有一个OPTEX公司的传感器,那上面第一行写着 OPB 6071-1,下一行是130k 40150,接下来一行是那个公司的logo和4005,据说是监测什么东西的,三个管脚,有谁知道是什么啊,具体功能和资料给下。在网上搜了很多资料没有完全符合的,只搜到了OPB ...…

查看全部问答>

PID算法演示程序

我也来发一个,PID算法演示程序小软件.............…

查看全部问答>

Windows Embedded CE 60正式上市.pdf

Windows Embedded CE 60正式上市.pdf…

查看全部问答>

关于用超级终端AT命令读取诺基亚手机短信的问题

   请问诺基亚5200通过蓝牙驱动IVT BlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是 ...…

查看全部问答>

Linux下V4L2编程小结--武汉华嵌吴扬飞老师

作者:华清远见武汉华嵌嵌入式培训中心 助理讲师 吴扬飞 Linux下V4L2编程小结 一.设置采集方式,格式 常用命令标志     打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使 ...…

查看全部问答>

求助

本人想学习FPGA 但是不知道怎么去选用资料,请各位大侠帮帮迷途小书生。学习Verilog 用哪本书好啊 ?…

查看全部问答>

跪求超声波测距程序

请高手指教,以下链接电路图能不能实现超声波测距?我想要一个超声波测距并在数码管上稳定显示的程序,在我的51开发板上测试。数码管的位选是P2^7,段选是P2^6,6个共阴极数码管。 …

查看全部问答>

我有强迫症,如何屏蔽CCS无害警告.

第0,1条是因为我在RAM中调试,CSM自然没什么用. 第2条是因为我用了IQMath_FPU32.lib,官方说了没事的,可是看着我不舒服,谁知道哪里永久屏蔽.…

查看全部问答>

【朱兆祺带你学嵌入式】第二章第四节 编译U-Boot模板

第二章第四节   编译U-Boot模板 U-Boot支持将编译生成的文件与源码文件分开放置,可以通过两种方式指定生成文件的目录。1)        在命令行参数添加中添加“O =”。liqiang@liqiang-virtual-machine:~/wo ...…

查看全部问答>

半导体恒温箱控制

怎么利用51单片机控制半导体制冷片工作…

查看全部问答>