硬汉嵌入式论坛

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

[emWin] GUI_MEMDEV_PunchOut效果和手册上不一致

[复制链接]

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2019-4-29 15:01:34 | 显示全部楼层 |阅读模式
我想用GUI_MEMDEV_PunchOut实现不规则图形显示,看到硬汉兄也推荐过用这个,问题是我发现显示效果和手册上是不一样的

模拟器测试代码如下:

  1. #include "GUI.h"
  2.   /*********************************************************************
  3.   *
  4.   * MainTask
  5.   */
  6.   void MainTask(void) {
  7.         GUI_MEMDEV_Handle hMemData;
  8.         GUI_MEMDEV_Handle hMemMask;
  9.         GUI_RECT Rect;
  10.         GUI_Init();
  11.         //
  12.         // Background
  13.         //
  14.         GUI_SetBkColor(GUI_DARKBLUE);
  15.         GUI_Clear();
  16.         GUI_DrawGradientV(0, 0, 99, 49, GUI_DARKGRAY, GUI_DARKBLUE);
  17.                 GUI_SetColor(GUI_WHITE);
  18.         //
  19.         // Mask device
  20.         //
  21.         hMemMask = GUI_MEMDEV_CreateFixed(0, 0, 99, 49, GUI_MEMDEV_NOTRANS,
  22.                 GUI_MEMDEV_APILIST_8, GUICC_8);
  23.                 GUI_SetDrawMode(GUI_DM_TRANS);
  24.         GUI_MEMDEV_Select(hMemMask);
  25.         GUI_SetBkColor(GUI_BLACK);
  26.         GUI_Clear();
  27.         GUI_AA_FillCircle(49, 24, 20);
  28.                 GUI_SetPenSize(8);
  29.         GUI_DrawLine(0, 0, 99, 49);
  30.                 //
  31.                 // Data Device
  32.                 //
  33.                 hMemData = GUI_MEMDEV_CreateFixed(0, 0, 99, 49, GUI_MEMDEV_NOTRANS,
  34.                 GUI_MEMDEV_APILIST_32, GUICC_8888);
  35.                 GUI_MEMDEV_Select(hMemData);
  36.         GUI_SetBkColor(GUI_LIGHTGRAY);
  37.         GUI_Clear();
  38.         Rect.x0 = 6;
  39.         Rect.y0 = 0;
  40.         Rect.x1 = 99;
  41.         Rect.y1 = 49;
  42.         GUI_SetColor(GUI_DARKGRAY);
  43.         GUI_DispStringInRectEx("Punch\r\nme\r\nout!", &Rect,
  44.                 GUI_TA_HCENTER | GUI_TA_VCENTER, 20, GUI_ROTATE_0);
  45.                 //
  46.                 // Result
  47.                 //
  48.                 GUI_MEMDEV_Select(0);
  49.         GUI_MEMDEV_PunchOutDevice(hMemData, hMemMask);
  50.                 GUI_MEMDEV_Write(hMemData);
  51.         while (1) {
  52.                 GUI_Delay(100);
  53.         }
  54. }
复制代码


mask上黑色部分保持黑色,并没有显示背景的内容

手册上效果

手册上效果

实际上效果

实际上效果
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2019-4-29 22:23:08 | 显示全部楼层
正常。

QQ截图20190429222136.jpg
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2019-4-29 22:23:21 | 显示全部楼层
用的你的代码。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 11:09:29 | 显示全部楼层
byccc 发表于 2019-4-29 22:23
用的你的代码。

我是用vc6,v548的模拟器,我现在重新下载了v548的模拟器,结果还是我原来的样子

这真是百思不得其解啊
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 11:11:13 | 显示全部楼层
byccc 发表于 2019-4-29 22:23
用的你的代码。

请问我们使用的其他条件都是一样的吗
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2019-4-30 11:37:32 | 显示全部楼层
myxiaonia 发表于 2019-4-30 11:11
请问我们使用的其他条件都是一样的吗

5.32
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 12:26:16 | 显示全部楼层

真是太遗憾了,我用5.30的试用了一下,也是可以的,版本上去反而不行了,难道是因为强行用vc6来支持548造成的?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-4-30 12:53:48 | 显示全部楼层
5.48的话,换个颜色格式就正常了

QQ截图20190430125241.jpg
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 13:03:56 | 显示全部楼层
eric2013 发表于 2019-4-30 12:53
5.48的话,换个颜色格式就正常了

真的是  这是什么道理
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-4-30 13:05:14 | 显示全部楼层
myxiaonia 发表于 2019-4-30 13:03
真的是  这是什么道理

不知道他这个版本的模拟器咋回事,正常情况下,原来的8888应该可以正常显示才对。
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 13:09:13 | 显示全部楼层
eric2013 发表于 2019-4-30 13:05
不知道他这个版本的模拟器咋回事,正常情况下,原来的8888应该可以正常显示才对。

百思不得其解啊,硬汉你是一个个试用过来的吗
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 13:32:27 | 显示全部楼层
eric2013 发表于 2019-4-30 13:05
不知道他这个版本的模拟器咋回事,正常情况下,原来的8888应该可以正常显示才对。

在回复byccc的时候,我验证发现5.30是对的,然后就去比较lcdconf和guiconf文件的不同,因为如果有什么不一致的地方只可能是这个配置有关了,刚才我注意到一个细节但是不理解,现在发现用guicc_565可行,这个细节就有点意思了

5.30  
guiconf.c                     
// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  0x400000

lcdconf.c
#define XSIZE_PHYS  320
#define YSIZE_PHYS  240

5.48
guiconf.c                     
// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  0x280000

lcdconf.c
#define XSIZE_PHYS 480
#define YSIZE_PHYS 272

比较就可以发现,530中分辨率更小gui内存更大,548中正好相反;

gui内存/分辨率:
548   20.xxx
530   54.xxx

可见530是548的2倍以上,因此是不是模拟器内置显示驱动已经改成了用2个字节来表示像素颜色,这可以理解为何换用GUICC_565就可行了,因为此时两者终于对应了
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
 楼主| 发表于 2019-4-30 13:48:53 | 显示全部楼层
我将530和548模拟器的设置成相同参数
#define XSIZE_PHYS 480
#define YSIZE_PHYS 272

#define COLOR_CONVERSION GUICC_888

这样参数都一样了吧,运行以后查看 emwinsim system info
使用字节数:
530  271136
548  24476

10倍以上的字节差距,毫无疑问模拟器显示驱动已经改变了,就是不知道segger有没有官方说明这个问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-4-30 14:48:34 | 显示全部楼层
myxiaonia 发表于 2019-4-30 13:48
我将530和548模拟器的设置成相同参数
#define XSIZE_PHYS 480
#define YSIZE_PHYS 272

可以用emWin5.44模拟器和STemWin5.44在板子上分别测试下,如果板子正常,那就没问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 22:11 , Processed in 0.314900 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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