|
1、出厂程序:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1285
2、小软件B2C.exe:
Bin2C.exe
(86 KB, 下载次数: 64)
3、所有图标文件:
48x48像素(32位带Alpha).zip
(160.16 KB, 下载次数: 49)
4、显示是调用的如下函数,使用方法看出厂程序即可:
- /*
- *********************************************************************************************************
- * 函 数 名: LCD_DrawIcon32
- * 功能说明: 在LCD上绘制一个图标, 带有透明信息的位图(32位, RGBA). 图标下带文字
- * 形 参: _pIcon : 图标结构
- * _tFont : 字体属性
- * _ucFocusMode : 焦点模式。0 表示正常图标 1表示选中的图标
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void LCD_DrawIcon32(const ICON_T *_tIcon, FONT_T *_tFont, uint8_t _ucFocusMode)
- {
- const uint8_t *p;
- uint16_t usOldRGB, usNewRGB;
- int16_t x, y; /* 用于记录窗口内的相对坐标 */
- uint8_t R1,G1,B1,A; /* 新像素色彩分量 */
- uint8_t R0,G0,B0; /* 旧像素色彩分量 */
- p = (const uint8_t *)_tIcon->pBmp;
- p += 54; /* 直接指向图像数据区 */
- /* 按照BMP位图次序,从左至右,从上至下扫描 */
- for (y = _tIcon->Height - 1; y >= 0; y--)
- {
- for (x = 0; x < _tIcon->Width; x++)
- {
- B1 = *p++;
- G1 = *p++;
- R1 = *p++;
- A = *p++; /* Alpha 值(透明度),0-255, 0表示透明,1表示不透明, 中间值表示透明度 */
- if (A == 0x00) /* 需要透明,显示背景 */
- {
- ; /* 不用刷新背景 */
- }
- else if (A == 0xFF) /* 完全不透明, 显示新像素 */
- {
- usNewRGB = RGB(R1, G1, B1);
- if (_ucFocusMode == 1)
- {
- usNewRGB = LCD_Blend565(usNewRGB, CL_YELLOW, 10);
- }
- LCD_PutPixel(x + _tIcon->Left, y + _tIcon->Top, usNewRGB);
- }
- else /* 半透明 */
- {
- /* 计算公式: 实际显示颜色 = 前景颜色 * Alpha / 255 + 背景颜色 * (255-Alpha) / 255 */
- usOldRGB = LCD_GetPixel(x + _tIcon->Left, y + _tIcon->Top);
-
- //usOldRGB = 0xFFFF;
- R0 = RGB565_R(usOldRGB);
- G0 = RGB565_G(usOldRGB);
- B0 = RGB565_B(usOldRGB);
- R1 = (R1 * A) / 255 + R0 * (255 - A) / 255;
- G1 = (G1 * A) / 255 + G0 * (255 - A) / 255;
- B1 = (B1 * A) / 255 + B0 * (255 - A) / 255;
- usNewRGB = RGB(R1, G1, B1);
- if (_ucFocusMode == 1)
- {
- usNewRGB = LCD_Blend565(usNewRGB, CL_YELLOW, 10);
- }
- LCD_PutPixel(x + _tIcon->Left, y + _tIcon->Top, usNewRGB);
-
- LCD_PutPixel(x + _tIcon->Left, y + _tIcon->Top, usNewRGB);
- }
- }
- }
- /* 绘制图标下的文字 */
- {
- uint16_t len;
- uint16_t width;
- len = strlen(_tIcon->Text);
- if (len == 0)
- {
- return; /* 如果图标文本长度为0,则不显示 */
- }
- /* 计算文本的总宽度 */
- if (_tFont->FontCode == FC_ST_12) /* 12点阵 */
- {
- width = 6 * (len + _tFont->Space);
- }
- else /* FC_ST_16 */
- {
- width = 8 * (len + _tFont->Space);
- }
- /* 水平居中 */
- x = (_tIcon->Left + _tIcon->Width / 2) - width / 2;
- y = _tIcon->Top + _tIcon->Height + 2;
- LCD_DispStr(x, y, (char *)_tIcon->Text, _tFont);
- }
- }
复制代码 |
|