老酒馆的猫 发表于 2023-12-7 16:26:20

急,emWIN如何内嵌仪表,从而实现双仪表?

我打算emwin做一个双仪表设计,如图所示,蓝色画线部分大仪表背景图固定不动,指针旋转即可。这部分我已经用emwin自动存储设备例程修改实现了。但第二个内嵌的仪表不知道该如何实现,第二个内嵌小仪表是需要转动的,接收到相应数值转动多少度,就是有一张大图400*400,但我只开个100*100显示部分区域,收到数值后进行图片旋转偏移改变显示的内容。

而且曾经关系如图那样两个仪表背景都在指针下面。
第一种思路,我尝试在自动存储设备主函数下直接创建一个存储设备,然后再while(1)里用GUI_MEMDEV_CopyToLCDAt(hMem, 400, 220);写入LCD中。
假设区域设为100*100,但是存储设备一直会在指针上面,而且指针碰到这个存储设备区域,就会闪烁,应该是指针属于自动设备,存在局部刷新,所以导致闪烁。

第二种思路我我选择在创建的自动存储设备GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, &_Draw, &Param);里的_Draw直接加存储设备显示底图,结果屏幕黑了,没任何反应。是因为不能再自动存储设备函数里加入自己创建的存储设备吗?


第三种思路我选择在创建的自动存储设备GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, &_Draw, &Param);里的_Draw中设置两个层,小仪表作为最底层,然后大仪表背景图打算开个孔,就是把图需要显示小仪表的区域弄成透明并把大仪表背景弄在第二层,然后指针放在第三层。但我发现再自动存储设备上无法利用GUI_DrawBitmap(&bm, x, y);绘制具有GUI_DRAW_BMPA565格式的图,一旦调用绘制这种格式的图,屏幕也是黑屏。如果没有这种透明格式,就可以绘制正常显示。屏幕是565格式的。而且我在想就算成功绘制透明图片,也好像没有旋转图片的函数,只有旋转存储设备的函数。


同时说明一下GUI_DRAW_BMPA565格式透明图片如果单独显示,就是不用创建自动设备,我用表盘那个例子把图片改为有透明像素的图片是可以显示的。

求大神给个思路方案。我贴出了部分代码图,请教一下大家。

老酒馆的猫 发表于 2023-12-8 07:56:38

有大神提供一下思路吗

eric2013 发表于 2023-12-8 09:57:53

有动态效果图没,方便的话,看下

老酒馆的猫 发表于 2023-12-8 10:13:59

硬汉哥我在网上找了张图,能看懂吗?

老酒馆的猫 发表于 2023-12-8 10:15:46

eric2013 发表于 2023-12-8 09:57
有动态效果图没,方便的话,看下

没有动态图,但我找了网上差不多的仪表大概描述了一下,类似飞机仪表那种,硬汉哥觉得emwin能实现吗?我感觉利用多边形绘画指针局部刷新,指针效果还可以,但如果利用定时器旋转存储设备函数,就很卡

eric2013 发表于 2023-12-10 00:36:34

老酒馆的猫 发表于 2023-12-8 10:15
没有动态图,但我找了网上差不多的仪表大概描述了一下,类似飞机仪表那种,硬汉哥觉得emwin能实现吗?我 ...

你现在硬件平台用的什么,如果是你前面说的刷新速度,确实有点慢。

旋转图片是最好的,效果比较炫酷些。类似飞机仪表那种效果,emWin完全没问题。

老酒馆的猫 发表于 2023-12-11 09:24:06

eric2013 发表于 2023-12-10 00:36
你现在硬件平台用的什么,如果是你前面说的刷新速度,确实有点慢。

旋转图片是最好的,效果比较炫酷些 ...

是stm32的h743iit

eric2013 发表于 2023-12-11 09:27:14

老酒馆的猫 发表于 2023-12-11 09:24
是stm32的h743iit

那你这个也太慢了。

DX3906 发表于 2023-12-11 14:02:47

想到一种思路不知道可行不
试试所有元素都用窗口实现,指针、小仪表和大仪表的图片作为各自的窗口的背景,旋转的时候就直接旋转窗口,这样能用上emwin的窗口管理器,可能会比较好管理元素之间的层次关系

老酒馆的猫 发表于 2023-12-11 14:40:25

eric2013 发表于 2023-12-11 09:27
那你这个也太慢了。

是指硬件问题吗?

老酒馆的猫 发表于 2023-12-11 14:41:23

DX3906 发表于 2023-12-11 14:02
想到一种思路不知道可行不
试试所有元素都用窗口实现,指针、小仪表和大仪表的图片作为各自的窗口的背景, ...

这个我试过了,就是窗口放图,然后旋转窗口很慢

12345fish 发表于 2023-12-11 15:02:07

emWin例程里有类似的,参考MEMDEV_Speedometer.c

DX3906 发表于 2023-12-11 15:45:43

老酒馆的猫 发表于 2023-12-11 14:41
这个我试过了,就是窗口放图,然后旋转窗口很慢

感觉似乎像是sdram慢了,是16bit的吗?屏幕分辨率和像素时钟是多少?

老酒馆的猫 发表于 2023-12-11 16:39:23

DX3906 发表于 2023-12-11 15:45
感觉似乎像是sdram慢了,是16bit的吗?屏幕分辨率和像素时钟是多少?

480*480 sdram用的是16bit的

老酒馆的猫 发表于 2023-12-11 16:40:53

12345fish 发表于 2023-12-11 15:02
emWin例程里有类似的,参考MEMDEV_Speedometer.c

看过了,没有内部嵌入仪表的操作。所以很头疼
页: [1]
查看完整版本: 急,emWIN如何内嵌仪表,从而实现双仪表?