历史上的今天

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

正在发生

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

发布者:自由漫步 来源: eefocus关键字:OLED屏  GUI支持  图片控件 手机看文章 扫描二维码
随时随地手机看文章

环境:


主机: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);


关键字:OLED屏  GUI支持  图片控件 引用地址:为OLED屏增加GUI支持5:图片控件

上一篇:为OLED屏增加GUI支持1:OLED驱动
下一篇:为OLED屏增加GUI支持4:文本框控件

推荐阅读

从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧:开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312)开发工具:UltraEdit宿主机:VmWare Ubuntu12.04(64bit)编译工具:arm-linux-gcc4.5.1为...
加拿大EMS企业增强安大略省生产基地的原型制造/新品导入功能。 来自加拿大的SigmaPoint科技公司,为了增强其在物联网领域的竞争力,在安大略省基奇纳市的Catalyst 137物联网制造中心,设立一个面积达1,500平方米,技术先进的原型构造/新品导入中心,并为此添置第二台环球仪器Fuzion2-37™贴片机,以此来增强其高产出、及灵活应对新产品的能力。 作为一家E...
TDS2012C如何准确地测试纹波:TDS2000系列示波器是泰克入门级的唯一一款是终身保修的示波器,从带宽60-200MHZ在市场上已经存在从第一代到现在已经有10个年头了,这一款经典的示波器广泛使用在电源纹波测,一般示波器是使用带宽限制来测量纹波,以防止拾取并非真正存在的高频杂讯。示波器带宽设置为20M即可。去掉探头“帽子”和地线夹,以防止长地线形成的...
力 源 半 导 体( 力 源 信 息 全 资 子 公 司, 股 票 代 码 300184) 在 今 日 官 宣, 由 其 自 主 研 发 的 首 款 基 于Cortex-M0+ 内核MCU产品 CW32F030 面世了。这也是力源半导体 CW32F 系列的首款 32 位 MCU。据悉首批供货产品可同时提供 LQFP48、LQFP32 和 TSSOP20 三种封装形式,全面实现 -40℃ ~105℃超宽温度范围和1.65V~5.5V ...

史海拾趣

问答坊 | AI 解惑

跪求! BJT形式的UA741版图一张

          BJT形式的UA741版图一张,我在网上 找不到相关的资料!   希望各位高手可以帮我一下…

查看全部问答∨

单片机应用编程技巧100问(PDF格式,推荐下载)

资料说明:     本资料从“汇编语言、单片机的基本特点”,“单片机的学习方法”,“常见的开发问题”等几个方面列出了对应的100个有针对性的问题,从各个问题的详细解答读者可以初步的了解到单片机的一些相关知识,对于想要了解与学习 ...…

查看全部问答∨

单片机实验及实践教程

单片机实验及实践教程。…

查看全部问答∨

如何通过仿真有效提高数模混合设计性能 .pdf

很不做的电子工程师看的资料,希望大家喜欢!…

查看全部问答∨

分享滤波器设计软件(超级实用!)

本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 filter solution!很实用的!! 输入需要的截止频率,然后就会自动生成实用的滤波器的电路图~~  …

查看全部问答∨

G题

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 G题的有用资料,希望对大家有用。  …

查看全部问答∨

【FPGA百问】异步信号同步化,怎样设计?

经常设计中,我们需要对异步信号同步化设计,最简单的例子,比如,异步串口设计。 对于异步信号怎样同步化处理,推荐如下图:     简单分析:              &nbs ...…

查看全部问答∨

请各位帮我修改下串口程序的错误

#include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar b[4]; uchar code table[]=\"I get \"; void init() {         TMOD=0x20;     //确定T1的工作方式 &n ...…

查看全部问答∨

有人在虚拟机里配置好了WINCE4.2开发环境吗?说说具体怎么做

虚拟机的选择 基础OS的选择 虚拟机里面的OS PlatForm Buider 最好是4.2,不是的话说说也行。这个很重要,没有它不行啊 编程工具EVC,版本应该是4.2。选别的编程工具也行。编程工具不重要。不说也罢。…

查看全部问答∨

二次拨号问题 AT%%DTMF

如题.在Wince6.0 RILMDD的基础上进行二次拨号功能的开发,Modem的指令为DTMF,我按照参数进行配置后,可以收到Modem的Response.<CR><LF>1.<CR><LF><CR><LF>OK<CR><LF> 拨入命令为AT%%DTMF=<CallID><CharNUM> ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved