为OLED屏增加GUI支持5:图片控件

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

环境:

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




时间: 2024-12-21 17:14:13

为OLED屏增加GUI支持5:图片控件的相关文章

为OLED屏增加GUI支持4:文本框控件

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 说明: 本文定义了文本框控件.在gui中增加了字库支持后,就可以用文本框来显示字符. 源代码: gui_widget_text.h /** * Copyright (c), 2015-2025 * @file gui_widget_text.h * @brief 文本控件头文件 * @author jdh * @date

为OLED屏增加GUI支持3:字库

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 说明: GUI中有字库方能显示汉字,英文,数字等.英文数字等ASCII码128个字符保存显示容易,但汉字数万,如果不用字库芯片,用软件保存,则flash明显不够.所以只添加需要显示的汉字. 本GUI用的显示方法,可以容易的显示不同字体,不同字号的汉字和ASCII码. 源代码及步骤: 1.用工具FontCvt.exe(emw

为OLED屏增加GUI支持6:进度条控件

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 源代码: gui_widget_progbar.h /** * Copyright (c), 2015-2025 * @file gui_widget_progbar.h * @brief 文本控件头文件 * @author jdh * @date 2015/11/22 */ #ifndef _GUI_WIDGET_PRO

为OLED屏添加GUI支持3:字库

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 说明: GUI中有字库方能显示汉字.英文,数字等.英文数字等ASCII码128个字符保存显示easy.但汉字数万,假设不用字库芯片,用软件保存.则flash明显不够.所以仅仅加入须要显示的汉字. 本GUI用的显示方法,能够easy的显示不同字体,不同字号的汉字和ASCII码. 源码及步骤: 1.用工具FontCvt.exe

为OLED屏添加GUI支持6:进度条控件

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 源码: gui_widget_progbar.h /** * Copyright (c), 2015-2025 * @file gui_widget_progbar.h * @brief 文本控件头文件 * @author jdh * @date 2015/11/22 */ #ifndef _GUI_WIDGET_PROG

Android support library支持包常用控件介绍(二)

谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library 支持库,让开发者更容易的实现材料设计的效果.顺便推荐官方的一个图标库:Material Icons 控件名称 NavigationView FloatingActionButton TextInputLayout Snackbar TabLayout AppBarLayout Coordinator

自定义圆角图片控件(Xfermode方式)

苹果都放弃自己的棱角了... 看惯了方方正正的图片,乍一看到圆角图片觉得挺漂亮的.可当满世界都是圆角图片的时候,我又开始怀念那些棱角了~之前仓促的写过一个,今天拿过来又修改了一下,现在贴在这里,以方便以后ctrl+c.ctrl+v~~~~~ 一.目标 自定义一个图片控件,有圆形和圆角两种选择.控件的行为和ImageView一致! 二.思路 扩展ImageView控件,重写其onDraw方法.一开始还想重写onMeasure方法,如果显示圆形图片强制宽高相等,没能行得通(代码中会说明).圆角图片以

支持Tooltips的控件包MindFusion.WinForms Pack

MindFusion.WinForms Pack是一款专业的控件包,包含了流程图绘制控件.图表和仪表控件.日历日程安排控件.报表控件.可以很容易地整合控件到应用程序中. 具体功能: 流程图控件: 支持文档视图结构 支持滚动和放大 支持Tooltips 支持多个选择 支持undo/redo.复制和粘贴操作 支持路径查找和循环检测 支持导出为图片.PDf.DXF.Visio 2003和SVG格式 支持容器节点 合并表单元格 锁定图形元素 扩展或者收缩多层对象 8种自动布局 可格式化的Html文本 支

VS2010/MFC常用控件:图片控件Picture Control

图片控件Picture Control 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到的静态文本框都是静态文本控件,因此两者的使用方法有很多相同之处,所属类都是CStatic类,有关成员函数已在前面介绍,这里就不重复了. 图片控件静态和动态加载图片 鸡啄米下面为大家演示如何为图片控件静态和动态加载位图图片. 1. 图片控件静态加载图片 1)创建一个基于对话框的MFC工程,名称设置为“