硬汉嵌入式论坛

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

[emWin] 请教下,使用 GUI_MEMDEV_Rotate 旋转显示表盘指针图片 ?

[复制链接]

612

主题

3066

回帖

4922

积分

至尊会员

积分
4922
发表于 2018-5-29 11:08:09 | 显示全部楼层 |阅读模式
请教下,使用 GUI_MEMDEV_Rotate 旋转显示表盘指针图片 ?
使用函数 GUI_MEMDEV_Rotate ,图片旋转始终都是以图片的中心为基准的,有没有什么方法可以改一下啊 ?

另外,指针图片是不是需要做成 镜像的图片 ,吧镜像部分搞成透明 ??????

效果如下:

旋转图片-2.jpg


旋转图片-0.jpg


旋转图片-1.jpg


显示代码如下:

void GUI_MEMDEV_ColckRotaeShow(void)
{
        int      t0;   // 用于三个指针的计数
        int      t1;
        int      t2;

        GUI_MEMDEV_Select(hMemDest);
        GUI_MEMDEV_Write  (hMemLcd);  //将给定存储设备的内容写入当前选定的存储设备中,

        GUI_MEMDEV_Rotate(hMemSourceBk,
                                                hMemDest,
                                                0,  //      显示地址由 hMemDest、hMemLcd 决定
                                                0,  //      显示地址由 hMemDest、hMemLcd 决定
                                                0,  //      因为显示表盘不需要旋转,所以此次的值为0
                                                1000);

        // 第一个指针计数,用于旋转秒针
        t0 = 360 - (RotateSecond * 6);

        // 第二个指针计数,用于旋转分针
        t1 = 360 - (RotateMinute *6) -(RotateSecond /10);  //秒针每移动10秒,分钟移动的角度为1度
                                                               
       
  /*
           把小时 sTime.Hours%12是吧24小时制式sTime.Hours转化为12小时制,*30(因为小时时针每小时运行30度),
                 ((sTime.Minutes /10)*6) 这句是分钟每移动10分钟,小时时针移动 6度
        */
        t2 = 360 - (((RotateHour)%12) * 30) - ((RotateMinute /10)*6);


        GUI_MEMDEV_RotateHQ(hMemHour,
                                                hMemDest,
                                                100+56, // (RectDest.x1 - RectSource.x1) / 2,
                                                83,  //(RectDest.y1 - RectSource.y1) / 2,
                                                t2 * 1000,
                                                1000);



        GUI_MEMDEV_RotateHQ(hMemMinute,
                                                hMemDest,
                                                100+56, // (RectDest.x1 - RectSource.x1) / 2,
                                                43,  //(RectDest.y1 - RectSource.y1) / 2,
                                                t1 * 1000,
                                                1000);


        GUI_MEMDEV_RotateHQ(hMemSecond,
                                                hMemDest,
                                                100+59, // (RectDest.x1 - RectSource.x1) / 2,
                                                174/4+32,  //(RectDest.y1 - RectSource.y1) / 2,
                                                t0 * 1000,
                                                1000);



        GUI_MEMDEV_Select(0);                                                                                 
        GUI_MULTIBUF_Begin();                                                                                 
        GUI_MEMDEV_CopyToLCD            (hMemDest);                                                                                 
        GUI_MULTIBUF_End();

        RotateSecond ++;

        if(RotateSecond >= 60)
        {
                RotateSecond = 0;
                RotateMinute++;
                if(RotateMinute >= 60)
                {
                        RotateMinute =0;
                        RotateHour++;
                        if(RotateHour >= 24)
                        {
                                RotateHour=0;
                        }
                }
        }
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-5-29 12:36:54 | 显示全部楼层
你得研究这个例子才行,最好把这个例子逐步删减函数,从而将实现框架弄出来,我一般都是这么搞的。

然后你再搞,效果就会好很多。
http://www.armbbs.cn/forum.php?m ... mp;highlight=bitmap
回复

使用道具 举报

612

主题

3066

回帖

4922

积分

至尊会员

积分
4922
 楼主| 发表于 2018-5-29 14:25:54 | 显示全部楼层
eric2013 发表于 2018-5-29 12:36
你得研究这个例子才行,最好把这个例子逐步删减函数,从而将实现框架弄出来,我一般都是这么搞的。

然后 ...

这个历程我貌似仿真了,但是我仿真时 ,貌似指针没有出来啊,很是奇怪
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2018-7-21 11:40:25 | 显示全部楼层
hpdell 发表于 2018-5-29 14:25
这个历程我貌似仿真了,但是我仿真时 ,貌似指针没有出来啊,很是奇怪

请问你这个指针带透明的吧?我们我旋转后透明的地方是黑色的?
GUI_MEMDEV_CreateFixed(0, 0, 200, 200, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_888);

使用GUI_MEMDEV_NOTRANS参数就完全不显示了。
回复

使用道具 举报

612

主题

3066

回帖

4922

积分

至尊会员

积分
4922
 楼主| 发表于 2018-7-23 11:24:56 | 显示全部楼层
本帖最后由 hpdell 于 2018-7-23 11:36 编辑
猫腻 发表于 2018-7-21 11:40
请问你这个指针带透明的吧?我们我旋转后透明的地方是黑色的?
GUI_MEMDEV_CreateFixed(0, 0, 200, 200,  ...

图片旋转必须是 argb8888 格式的,不支持 rgb888的,这点要特别注意哟

另外在图片初始化函数里面需要设置为 透明色

                GUI_MEMDEV_Select(_ClockParm->hMem1_Clock[0]);
                _ClockParm->_acComBuff   = _ClockParm->_acClockBuf[0];
                bmomega_367x332_8888.pData = _ClockParm->_acComBuff;
                GUI_SetBkColor(GUI_TRANSPARENT );                                           //此处设置为 透明色  
                GUI_Clear();               
                GUI_DrawBitmap(&bmomega_367x332_8888, 0, 0);  // 显示透明效果的图片

回复

使用道具 举报

1

主题

3

回帖

19

积分

新手上路

积分
19
发表于 2018-7-23 11:59:04 | 显示全部楼层
hpdell 发表于 2018-7-23 11:24
图片旋转必须是 argb8888 格式的,不支持 rgb888的,这点要特别注意哟

另外在图片初始化函数里面需要 ...

我也猜测是跟图片格式有关,但是转换工具里面也没有argb8888格式,智能转成GUI_DRAW_BMPA565。emwin里也找不到argb8888格式是在哪里定义的。惆怅啊!
回复

使用道具 举报

612

主题

3066

回帖

4922

积分

至尊会员

积分
4922
 楼主| 发表于 2018-7-23 12:28:26 | 显示全部楼层
猫腻_A32p3 发表于 2018-7-23 11:59
我也猜测是跟图片格式有关,但是转换工具里面也没有argb8888格式,智能转成GUI_DRAW_BMPA565。emwin里也 ...

那是你的工具不行啊,

肯定有的,要不你更换工具试试看
貌似本论坛就有 或者 你下载的 emwin 的文件夹里面也有
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 02:50 , Processed in 0.204782 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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