硬汉嵌入式论坛

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

[emWin] 波形图控件GRAPH_DATA_XY_SetOwnerDraw()无效果

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-6-12 15:50:27 | 显示全部楼层 |阅读模式
本帖最后由 kokoromi 于 2020-6-12 16:23 编辑

波形图控件有个绘制回调函数GRAPH_DATA_XY_SetOwnerDraw(),使用后发现没有效果,GUI不会回调这个函数,不知道怎么回事,最后不得已用的GRAPH_SetUserDraw()这个函数...
咋回事呢?按照给的例子做的,没用。

另外还有个疑问,GUI_BMP_Serialize()这个函数可以用来实现截屏,但我看手册里说最大支持24bpp,那我颜色格式是32bpp的ARGB8888的咋办,没法用了吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-6-12 21:49:13 | 显示全部楼层
1、这个函数没用过,后面有时间了试试。
2、试试这个,可以指定通道数:GUI_BMP_SerializeExBpp

现在的截图功能,以电脑端为例,也是无法截取Alpha通道的,这个是透明通道,截取的意义不大。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-6-13 09:19:39 | 显示全部楼层
本帖最后由 kokoromi 于 2020-6-13 11:26 编辑
eric2013 发表于 2020-6-12 21:49
1、这个函数没用过,后面有时间了试试。
2、试试这个,可以指定通道数:GUI_BMP_SerializeExBpp

1、好的,等你消息,希望能发个研究贴,简单讨论下GRAPH_DATA_XY_SetOwnerDraw()和GRAPH_SetUserDraw()的区别啥的。
2、我试试这个,透明通道截取意义确实不大,按理说,函数应该能自动从32bpp显存中提取出24bpp的有用信息,感觉有些时候还是得用32bpp的ARGB8888方案,24bpp的RGB888是不是没法显示png的透明度啊。
更新:
2、刚才GUI_BMP_SerializeExBpp和GUI_BMP_Serialize这俩函数都试了下,竟然都好使,看来函数GUI_BMP_Serialize应该是在内部做了处理,将32bpp的内容去掉了透明度提取出了24bpp的有效内容。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-6-13 13:14:30 | 显示全部楼层
kokoromi 发表于 2020-6-13 09:19
1、好的,等你消息,希望能发个研究贴,简单讨论下GRAPH_DATA_XY_SetOwnerDraw()和GRAPH_SetUserDraw()的 ...

如果你说的是硬件接口配置为RGB888,这个不影响你应用层使用透明的png。

回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-6-13 14:25:05 | 显示全部楼层
eric2013 发表于 2020-6-13 13:14
如果你说的是硬件接口配置为RGB888,这个不影响你应用层使用透明的png。
  1. #define COLOR_CONVERSION_0            GUICC_M8888I                /**< @brief 第一层颜色转换驱动 */
  2. #define DISPLAY_DRIVER_0              GUIDRV_LIN_32               /**< @brief 第一层显示驱动 */
  3. #define LCD_LAYER0_FRAME_BUFFER       ((uint32_t)0xC0000000)      /**< @brief 第一层显存起始地址(包含多个缓冲区) */
复制代码


颜色驱动和显示驱动用的是这些,LTDC的接口是RGB888的。你的意思是把GUICC_M8888I和GUIDRV_LIN_32改成GUICC_M888和GUIDRV_LIN_24也能显示透明png?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-6-13 20:37:13 | 显示全部楼层
kokoromi 发表于 2020-6-13 14:25
颜色驱动和显示驱动用的是这些,LTDC的接口是RGB888的。你的意思是把GUICC_M8888I和GUIDRV_LIN_32改 ...

是的。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-6-14 09:01:26 | 显示全部楼层

如果驱动改成 GUICC_M888 和 GUIDRV_LIN_24,那我用png图片生成流位图的时候是选择32bpp格式还是24bpp格式?如果选择24bpp的话,透明度信息都没有了吧,图片四周都是白色,如何显示透明效果的,有点迷糊了...
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2020-6-15 10:38:01 | 显示全部楼层
我这么用得,感觉很好,很容易。
hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
GRAPH_SetUserDraw(hItem, UserFacGraphDraw);

static void UserFacGraphDraw(WM_HWIN hWin, int Stage)
{
    int16_t min,max;
    max=WaveMaxIndex;
    min=WaveMinIndex;

    switch (Stage)
    {
    case GRAPH_DRAW_FIRST:
        /* Draw for example a user defined grid...*/
        GUI_DrawVLine(max+BORDER_LEFT,50+BORDER_TOP,200+BORDER_TOP);
        GUI_DrawVLine(min+BORDER_LEFT,50+BORDER_TOP,200+BORDER_TOP);
        break;
    case GRAPH_DRAW_LAST:
        GUI_DispStringAt("AD",15,5);
        break;
    }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-6-16 10:16:32 | 显示全部楼层
kokoromi 发表于 2020-6-14 09:01
如果驱动改成 GUICC_M888 和 GUIDRV_LIN_24,那我用png图片生成流位图的时候是选择32bpp格式还是24bpp格 ...

这个都可以正常显示的。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-6-16 11:08:58 | 显示全部楼层
eric2013 发表于 2020-6-16 10:16
这个都可以正常显示的。

不带透明度通道的图片怎么透明显示?想不通,比如我用RGB888或者RGB565方案,怎么让图标周围变成透明的,而不是白的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-6-17 01:08:46 | 显示全部楼层
kokoromi 发表于 2020-6-16 11:08
不带透明度通道的图片怎么透明显示?想不通,比如我用RGB888或者RGB565方案,怎么让图标周围变成透明的, ...

这个emWin内部做处理了,不管你设置的硬件颜色格式是什么。

emWin内部工作的时候是ARGB8888或者ABGR8888格式的32位色。然后根据你的硬件颜色格式再做的转换展示。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2020-9-7 16:13:40 | 显示全部楼层
LCD RGB565显示屏 GUICC_M565调色板 GUI_BMP_Serialize函数截图的图片全是彩色竖线  GUI_BMP_SerializeExBpp函数参数设置8bpp可用截图显示正常图片 16bpp就不行 有人知道这是为什么嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-9-8 00:41:50 | 显示全部楼层
SundayRX 发表于 2020-9-7 16:13
LCD RGB565显示屏 GUICC_M565调色板 GUI_BMP_Serialize函数截图的图片全是彩色竖线  GUI_BMP_SerializeExBp ...

在你的另一个帖子里面回复你了

STEMWIN 屏幕截图 GUI_BMP_Serialize得到的图片不正常 全是彩色竖线
http://www.armbbs.cn/forum.php?m ... 9843&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 11:34 , Processed in 0.269572 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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