硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2746|回复: 3
收起左侧

[emWin] STemWin中的KNOB小部件的Background无法透明

[复制链接]

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2020-3-6 08:42:29 | 显示全部楼层 |阅读模式
在使用Knob的时候我想给它做一个背景图片上去。方法是:1.先GUI_MEMDEV_CreateFixed32()新建一个颜色深度为32位bpp的存储设备。

  1. hKnob = KNOB_CreateUser(150, 10, 128, 128, hWin, WM_CF_SHOW | WM_CF_MEMDEV, ID_KNOB_0, 0);
  2. //为KNOB控制创建一个32位的存储设备
  3.         hMemKnob = GUI_MEMDEV_CreateFixed32(0, 0, 128, 10);
  4.         hMemKnobBk = GUI_MEMDEV_CreateFixed32(0, 0, 128, 128);
  5.         //绘制KNOB的背景和内部
  6.         _DrawKnob(hMemKnob);
  7.         _DrawKnobBk(hMemKnobBk);
复制代码


2.在新建的存储设备中把背景清成透明色,再绘制图片等
  以下代码是绘制的Knob的外观
  1. static void _DrawKnob(GUI_MEMDEV_Handle hMemDev) {

  2.         int xSizeMem, ySizeMem;

  3.         xSizeMem = GUI_MEMDEV_GetXSize(hMemDev);
  4.         ySizeMem = GUI_MEMDEV_GetYSize(hMemDev);

  5.         GUI_AA_PreserveTrans(1);
  6.         GUI_MEMDEV_Select(hMemDev);
  7. GUI_SetBkColor(GUI_TRANSPARENT);
  8. //GUI_SetBkColor(0x80FFFFFF);
  9.         GUI_Clear();

  10.         GUI_AA_DrawLine(xSizeMem - 30, ySizeMem / 2, xSizeMem - 5, ySizeMem / 2);

  11.         GUI_MEMDEV_Select(0);

  12.         GUI_AA_PreserveTrans(0);
  13. }
复制代码

以下代码绘制的是KNOB的背景图片
  1. static void _DrawKnobBk(GUI_MEMDEV_Handle hMemDev) {

  2.         int xSizeMem, ySizeMem;
  3.         xSizeMem = GUI_MEMDEV_GetXSize(hMemDev);
  4.         ySizeMem = GUI_MEMDEV_GetYSize(hMemDev);

  5.         GUI_AA_PreserveTrans(1);
  6.         GUI_MEMDEV_Select(hMemDev);
  7. GUI_SetBkColor(GUI_TRANSPARENT);
  8. //GUI_SetBkColor(0xF50000FF);
  9.         GUI_Clear();

  10.         GUI_SetColor(GUI_YELLOW);
  11.         GUI_SetPenSize(4);
  12.         GUI_DrawLine(0, 0, xSizeMem, ySizeMem);
  13.         GUI_DrawLine(xSizeMem, 0, 0, ySizeMem);
  14.         GUI_DrawBitmap(&bmKnob_128px, 0, 0);
  15.         GUI_MEMDEV_Select(0);
  16.         GUI_AA_PreserveTrans(0);
  17. }
复制代码
如上如果我直接使用GUI_TRANSPARENT透明色,那么背景显示的却是黑色的如下图
QQ截图20200306082912.png
但是如果我在Knob的前景存储设备绘制带透明的东西却能正常显示如 GUI_SetBkColor(0x80FFFFFF);在前景存储设备中
QQ截图20200306083859.png
如上图的Knob的指针绘制的时候是带有alpha通道的其绘制也是正常的。

有没有大佬能够解释一下是哪里我理解得不对吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-3-6 14:10:41 | 显示全部楼层
看看是不是我这个帖子说的问题

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法
http://www.armbbs.cn/forum.php?m ... 8879&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2020-3-6 16:29:54 | 显示全部楼层
eric2013 发表于 2020-3-6 14:10
看看是不是我这个帖子说的问题

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法

非常感谢硬汉哥的解答。我在存储设备的绘制里是给了
  1. GUI_SetBkColor(GUI_TRANSPARENT);
  2. GUI_Clear();
复制代码
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2020-3-6 16:33:16 | 显示全部楼层
eric2013 发表于 2020-3-6 14:10
看看是不是我这个帖子说的问题

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法

非常感谢硬汉哥的回答,我在存储设备中是给了
  1. GUI_SetBkColor(GUI_TRANSPARENT);
  2.         //GUI_SetBkColor(0xCC0000FF);
  3.         GUI_Clear();
复制代码
但恰恰是这样他显示的就是黑色,清成不带alpha的就可以正常的显示其颜色。
而且这里在把这个存储设备设置为KNOB的背景他是不正常的显示,但是把其直接显示在窗口中却是正常的。我想可能是KNOB的BUG或者是我哪里没有正确理解吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-18 17:28 , Processed in 0.246132 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表