硬汉嵌入式论坛

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

[emWin] emwin透明图片

[复制链接]

10

主题

22

回帖

52

积分

初级会员

积分
52
发表于 2023-9-5 09:11:53 | 显示全部楼层 |阅读模式
emwin6.32 ,屏格式565的,图片1背景,图片2基于图片1透明,参考的安富莱emwin教程的时钟指针代码,但图片2透明部分总是黑的


    static GUI_MEMDEV_Handle hMem1 = 0;

    if(hMem1 == 0)
    {
        extern GUI_CONST_STORAGE GUI_BITMAP bmpressure_bk;
        hMem1 = GUI_MEMDEV_CreateFixed(
            0,0,
            bmpressure_bk.XSize,
            bmpressure_bk.YSize+10,
            GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
        //hMem1 = GUI_MEMDEV_CreateEx(0, 0, (89), (56),GUI_MEMDEV_HASTRANS);
        GUI_MEMDEV_Select(hMem1);
        GUI_SetBkColor(GUI_TRANSPARENT);
        GUI_Clear();
        GUI_DrawBitmap(&bmpressure_bk, 0, 0);

        GUI_MEMDEV_Select(0);
    }
    static GUI_MEMDEV_Handle hMem2 = 0;
    if(hMem2 == 0)
    {
        extern GUI_CONST_STORAGE GUI_BITMAP bmpointer;
        hMem2 = GUI_MEMDEV_CreateFixed(
            0,0,
            bmpointer.XSize,
            bmpointer.YSize,
            GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
        //hMem2 = GUI_MEMDEV_CreateEx(0, 0, (42), (42),GUI_MEMDEV_HASTRANS);
        GUI_MEMDEV_Select(hMem2);
        GUI_SetBkColor(GUI_TRANSPARENT);
        GUI_Clear();

        GUI_DrawBitmap(&bmpointer, 0, 0);
        GUI_MEMDEV_Select(0);
    }
    int16_t x0 = 639 + 45;
    int16_t y0 = 290 + 47;
    int16_t r = 45;

    static GUI_MEMDEV_Handle hMem = 0;
    if(hMem == 0)
    {
        //hMem = GUI_MEMDEV_Create(0, 0, (89), (56));
        hMem = GUI_MEMDEV_CreateFixed(
            0, 0, 89, 56,
            GUI_MEMDEV_NOTRANS,
            GUI_MEMDEV_APILIST_32,
            GUI_COLOR_CONV_8888);
    }
    GUI_MEMDEV_Select(hMem);
    //GUI_MEMDEV_Select(hMem1);
    GUI_SetBkColor(get_box_color());
    GUI_Clear();
    GUI_MEMDEV_WriteAt(hMem1,0,0);
    GUI_MEMDEV_WriteAt(hMem2,41,10);

    // GUI_POINT _bNeedle[6];
    // float radian = acos(-1);
    // int angle = _var_uint32(TREAT_PRESSURE);
    // //radian = (_var_uint32(TREAT_PRESSURE) - 180) * radian / 180;
    // radian = (angle - 180) * radian / 180;
    // GUI_RotatePolygon(&_bNeedle[0], &_aNeedle[0], GUI_COUNTOF(_aNeedle), radian);
    // GUI_SetColor(0xFFFFFFFF);
    // GUI_FillPolygon(&_bNeedle[0], GUI_COUNTOF(_aNeedle), x0, y0);

    // GUI_MEMDEV_CopyToLCD(hMem);
    GUI_MEMDEV_Select(0);
    GUI_MEMDEV_WriteAt(hMem,639,290);




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-9-5 09:19:14 | 显示全部楼层
试试

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

使用道具 举报

10

主题

22

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2023-9-5 09:59:37 | 显示全部楼层
是drawbitmap 还是drawpng
回复

使用道具 举报

10

主题

22

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2023-9-5 10:08:55 | 显示全部楼层
单个透明图片没问题,是两个透明图片叠加的时候
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-9-5 10:31:12 | 显示全部楼层
ccc_clive 发表于 2023-9-5 09:59
是drawbitmap 还是drawpng

对于存储设备使用,都一样。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-9-5 10:49:57 | 显示全部楼层
直接参考现成的案例吧,这个是多个图片叠加显示的

https://www.armbbs.cn/forum.php?mod=viewthread&tid=98429




回复

使用道具 举报

10

主题

22

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2023-9-5 19:01:25 | 显示全部楼层
应该是用了GUI_MEMDEV_WriteAt这个函数,这个好像对透明属性不支持
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 07:49 , Processed in 0.278298 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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