為OLED屏增加GUI支持5:圖片控件
環(huán)境:
主機(jī):WIN10
開(kāi)發(fā)環(huán)境:MDK5.13
MCU:STM32F103
說(shuō)明:
本文定義了圖片控件。OLED屏是單色屏,所以本圖片控件支持的是單色BMP圖像。
將普通圖像轉(zhuǎn)換為單色圖片可以用工具BmpCvt.exe。將轉(zhuǎn)換后的BMP圖像轉(zhuǎn)換為hex文件,可以用Bin2C.exe。這兩個(gè)工具都是emwin自帶工具。
源代碼:
轉(zhuǎn)換后的hex文件再整理成如下的示例格式:
battery0.c
/**
*Copyright(c),2015-2025
*@filebattery0.c
*@brief電池0格圖標(biāo)
*@authorjdh
*@date2015/11/9
*@verbatim
*說(shuō)明:
*1.圖片格式為bmp
*2.圖片大小為17*13
*@endverbatim
*/
/*********************************************************************
*頭文件
**********************************************************************/
#include"res.h"
/*********************************************************************
*全局變量
**********************************************************************/
constunsignedcharRes_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
};
/***************************Endoffile****************************/
gui_widget_image.h
/**
*Copyright(c),2015-2025
*@filegui_widget_image.h
*@brief圖片控件頭文件
*@authorjdh
*@date2015/9/8
*/
#ifndef_GUI_WIDGET_IMAGE_H_
#define_GUI_WIDGET_IMAGE_H_
/*********************************************************************
*頭文件
**********************************************************************/
#include"gui_interface.h"
/*********************************************************************
*數(shù)據(jù)結(jié)構(gòu)
**********************************************************************/
/**
*@brief圖片控件數(shù)據(jù)結(jié)構(gòu)
*/
typedefstruct_Widget_Image
{
//x軸位置
uint16_tx;
//y軸位置
uint16_ty;
//水平尺寸
uint16_txsize;
//垂直尺寸
uint16_tysize;
//圖片地址
constuint8_t*addr;
}*Widget_Image_Handle;
/*********************************************************************
*函數(shù)
**********************************************************************/
/**
*@brief創(chuàng)建控件text
*@paramx:左上角x坐標(biāo)
*@paramy:左上角y坐標(biāo)
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*/
Widget_Image_Handlegui_widget_image_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize);
/**
*@brief設(shè)置圖片
*@paramaddr:圖片地址
*/
voidgui_widget_image_set_bmp(Widget_Image_Handlehandle,constuint8_t*addr);
#endif
gui_widget_image.c
/**
*Copyright(c),2015-2025
*@filegui_widget_image.c
*@brief圖片控件主文件
*@authorjdh
*@date2015/9/8
*/
/*********************************************************************
*頭文件
**********************************************************************/
#include"gui_widget_image.h"
#include"gui_2d_lib.h"
#include"stdlib.h"
#include"string.h"
/*********************************************************************
*靜態(tài)函數(shù)
**********************************************************************/
/**
*@brief控件顯示
*@paramhandle:控件句柄
*/
staticvoidshow(Widget_Image_Handlehandle);
/*********************************************************************
*函數(shù)
**********************************************************************/
/**
*@brief創(chuàng)建控件text
*@paramx:左上角x坐標(biāo)
*@paramy:左上角y坐標(biāo)
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*/
Widget_Image_Handlegui_widget_image_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize)
{
Widget_Image_Handlehandle;
//控件初始化
handle=malloc(sizeof(*handle));
handle->x=x;
handle->y=y;
handle->xsize=xsize;
handle->ysize=ysize;
returnhandle;
}
/**
*@brief設(shè)置圖片
*@paramaddr:圖片地址
*/
voidgui_widget_image_set_bmp(Widget_Image_Handlehandle,constuint8_t*addr)
{
handle->addr=addr;
//顯示
show(handle);
}
/**
*@brief控件顯示
*@paramhandle:控件句柄
*/
staticvoidshow(Widget_Image_Handlehandle)
{
//清除區(qū)域
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);
}
測(cè)試代碼:
//電池圖標(biāo)
staticWidget_Image_HandleWidget_Image_Battery;
Widget_Image_Battery=gui_widget_image_create(106,0,17,13);
gui_widget_image_set_bmp(Widget_Image_Battery,Res_Battery0_Bmp);