硬汉嵌入式论坛

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

[emWin] emWin改变位图显示的颜色

[复制链接]

5

主题

15

回帖

69

积分

初级会员

积分
69
发表于 2018-4-16 18:23:19 | 显示全部楼层 |阅读模式
琢磨了一天,没搞定,请哪位大神提点一下!!!
怎么让图中的白色图形变成其他颜色,比如蓝色
IMG_0872.JPG
回复

使用道具 举报

5

主题

15

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2018-4-16 18:25:53 | 显示全部楼层
图片太大,放个小的
IMG_0872.JPG
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-4-16 18:30:09 | 显示全部楼层
使用颜色板,emWin的小软件BmpCvt可以转换。先将你的这个图片转换成单色的,然后使用颜色板转换生成C格式的。
回复

使用道具 举报

5

主题

15

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2018-4-16 18:32:50 | 显示全部楼层
eric2013 发表于 2018-4-16 18:30
使用颜色板,emWin的小软件BmpCvt可以转换。先将你的这个图片转换成单色的,然后使用颜色板转换生成C格式的 ...

我是想这个位图做图标,被选定的时候颜色能改变,老大怎么搞?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-4-16 18:49:55 | 显示全部楼层
dxpaccount 发表于 2018-4-16 18:32
我是想这个位图做图标,被选定的时候颜色能改变,老大怎么搞?

好弄,学习新版emWin教程的自定义按钮回调函数。
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-16 20:20:51 | 显示全部楼层
本帖最后由 roguebear 于 2018-4-16 20:21 编辑

/*   https://arm-stm.blogspot.com/2017/08/emwin-skins-for-buttons.html

用户手册959页  22.5 对“FLEX”皮肤外观的简单修改
  */

int ID_CurMotor;

static int _DrawSkinFlex_BUTTON(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
    int       Id;
    GUI_COLOR Color = GUI_CYAN ;

    switch (pDrawItemInfo->Cmd) {
    case WIDGET_ITEM_DRAW_BACKGROUND:
        Id = WM_GetId(pDrawItemInfo->hWin);
        switch (Id) {
        case ID_BUTTON_1:
        case ID_BUTTON_2:
        case ID_BUTTON_3:
        case ID_BUTTON_4:
        case ID_BUTTON_5:
        case ID_BUTTON_6:
        case ID_BUTTON_7:
        case ID_BUTTON_8:
        case ID_BUTTON_9:
        case ID_BUTTON_10:
        case ID_BUTTON_11:
        case ID_BUTTON_12:

            if( ID_CurMotor == Id && ( ! BUTTON_IsPressed(pDrawItemInfo->hWin) ) )
            {
                GUI_SetColor( Color );                //Color = GUI_CYAN;
                GUI_AA_FillRoundedRect(pDrawItemInfo->x0, pDrawItemInfo->y0, pDrawItemInfo->x1, pDrawItemInfo->y1, 6);
            }
            else
            {
                BUTTON_DrawSkinFlex(pDrawItemInfo);
            }

            break;


        }
        return 0;

    default:
        return BUTTON_DrawSkinFlex(pDrawItemInfo);
    }

}



static void _InvalidButton(int Id, WM_MESSAGE * pMsg)
{
    ID_CurMotor = Id;

    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_6) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_7) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_8) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_9) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_10) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_11) ,  _DrawSkinFlex_BUTTON  );
    BUTTON_SetSkin( WM_GetDialogItem(pMsg->hWin, ID_BUTTON_12) ,  _DrawSkinFlex_BUTTON  );
}












        case ID_BUTTON_1: // Notifications sent by '1'
            switch(NCode) {
            case WM_NOTIFICATION_CLICKED:
                // USER START (Optionally insert code for reacting on notification message)
                //BUTTON_SetPressed( WM_GetDialogItem(pMsg->hWin, Id), 1 );
                // USER END
                break;
            case WM_NOTIFICATION_RELEASED:
                // USER START (Optionally insert code for reacting on notification message)
                _InvalidButton( Id, pMsg );
                // USER END
                break;
                // USER START (Optionally insert additional code for further notification handling)
                // USER END
            }
            break;

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 15:54 , Processed in 0.504465 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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