历史上的今天
今天是: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);
史海拾趣
|
请问诺基亚5200通过蓝牙驱动IVT BlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是 ...… 查看全部问答> |
|
作者:华清远见武汉华嵌嵌入式培训中心 助理讲师 吴扬飞 Linux下V4L2编程小结 一.设置采集方式,格式 常用命令标志 打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使 ...… 查看全部问答> |
|
第0,1条是因为我在RAM中调试,CSM自然没什么用. 第2条是因为我用了IQMath_FPU32.lib,官方说了没事的,可是看着我不舒服,谁知道哪里永久屏蔽.… 查看全部问答> |
|
第二章第四节 编译U-Boot模板 U-Boot支持将编译生成的文件与源码文件分开放置,可以通过两种方式指定生成文件的目录。1) 在命令行参数添加中添加“O =”。liqiang@liqiang-virtual-machine:~/wo ...… 查看全部问答> |




