请教下,表盘指针图片旋转 ??

2019-12-14 12:14发布

本帖最后由 hpdell 于 2018-5-29 11:08 编辑

请教下,使用 GUI_MEMDEV_Rotate 旋转显示表盘指针图片 ?
使用函数 GUI_MEMDEV_Rotate ,图片旋转始终都是以图片的中心为基准的,有没有什么方法可以改一下啊 ?

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

效果如下:
旋转图片-2.jpg (40.87 KB, 下载次数: 0) 下载附件 2018-5-29 09:32 上传


显示代码如下:

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;
                        }
                }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。