硬汉嵌入式论坛

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

[emWin] 用GUI_MEMDEV_DrawAuto绘制对边形后出现的问题

[复制链接]

92

主题

293

回帖

569

积分

金牌会员

积分
569
发表于 2015-12-18 11:18:42 | 显示全部楼层 |阅读模式
在绘制一个如下的界面,按上下图标,2个屏切换后是没有问题的。
D.JPG 4.JPG

但是如果绘制了指针,再切换屏后就出问题了,圆弧的坐标怎么不对了
1.png


以下是我绘制指针的函数,就是模拟器上的一个代码

#define countof(obj) (sizeof(obj)/sizeof(obj[0]))        /* 获得数组中元素个数 */

static const GUI_POINT _aPointer[] = {                                /* 仪表指针多边形坐标点 */
  { 0,  3},
  {40,  1},
  {45,  0},
  {40, -1},
  { 0, -3}
};

static GUI_POINT _aPointerHiRes[countof(_aPointer)];

typedef struct
{
    GUI_AUTODEV_INFO    AutoInfo;
    GUI_POINT    aPoints[countof(_aPointer)];
    int Factor;
}PARAM;

static void _DrawPoint_Left(void * p)
{
  PARAM * pParam = (PARAM *)p;
  if (pParam->AutoInfo.DrawFixed)
    {
    GUI_ClearRect(45, 195, 135, 240);                        /* 此处为_ShowPoint_Left函数设置背景色的区域 */
  }
  GUI_AA_FillPolygon(pParam->aPoints,
                     countof(_aPointer),
                     90  * pParam->Factor,            
                     240 * pParam->Factor);            
}

static void _DrawPoint_Right(void * p)
{
  PARAM * pParam = (PARAM *)p;
  if (pParam->AutoInfo.DrawFixed)
    {
    GUI_ClearRect(225, 195, 310, 240);            
  }
  GUI_AA_FillPolygon(pParam->aPoints,
                     countof(_aPointer),
                     270  * pParam->Factor,            
                     240 * pParam->Factor);               
}

void _ShowPoint_Left(float Angle)
{
    GUI_AUTODEV aAuto;
    PARAM Param;
    unsigned i;   
    float Angle1;
   
    Param.Factor = 4;                                                             /* 抗锯齿系数 最大到6*/
    GUI_SetBkColor(CL_GREY5);                                             /* 修改背景色,绘制时会默认背景色为黑色,需要设置为想要的背景色 */
  GUI_MEMDEV_CreateAuto(&aAuto);  

    for (i=0; i<countof(_aPointer); i++)
    {
        _aPointerHiRes.x = _aPointer.x * Param.Factor;
        _aPointerHiRes.y = _aPointer.y * Param.Factor;
    }
    GUI_AA_SetFactor(Param.Factor);
    Angle1 = (3.1415926f / 180)*Angle;                            /* 旋转80度,从右边开始逆时针 */
    GUI_AA_EnableHiRes();
    GUI_SetColor(CL_WHITE1);                                            /* 指针的颜色 */
    GUI_RotatePolygon(Param.aPoints, _aPointerHiRes, countof(_aPointer), Angle1);
  GUI_MEMDEV_DrawAuto(&aAuto, &amparam.AutoInfo, _DrawPoint_Left, &amparam);
    GUI_MEMDEV_DeleteAuto(&aAuto);
}
最后我也删除了aAuto,怎么还是不行呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2015-12-18 22:35:35 | 显示全部楼层
你切屏是怎么切换的,清屏后重新绘制吗
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2015-12-19 17:21:29 | 显示全部楼层
是的,清屏后重新绘制
再传个我显示仪表指针的图片。就是显示了这个指针后就有问题了
1.JPG
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2015-12-22 09:36:49 | 显示全部楼层
void bsp_BkWindow1(void)
{
    GUI_Init();
    GUI_UC_SetEncodeUTF8();
   
    GUI_SetBkColor(CL_GREY5);                                                                    /* 背景色 */
    GUI_Clear();
    GUI_SetColor(CL_WHITE1);                                                                    /* 背景字体颜色 */   

    GUI_DrawBitmap(&bmdown, 370, 200);                                                
   
    GUI_SetPenSize(2);
    GUI_DrawLine(1, 0, 1, 240);                                                               
    GUI_DrawLine(180,0,180,240);
    GUI_DrawLine(360,0,360,240);
   
    /* 温度相关的显示 */
    GUI_SetTextMode(GUI_TM_TRANS);                                                     
    GUI_SetColor(CL_WHITE1);
    GUI_SetFont(&GUI_Fontheiti_27b);
    GUI_DispStringAt("\\xE6\\xB8\\xA9\\xE5\\xBA\\xA6",60,10);      
    GUI_SetFont(&GUI_Fontheiti_24b);
    GUI_DispStringAt("\\xE2\\x84\\x83",130,120);                              
   
    GUI_SetPenSize(15);                                                                                /* 温度仪表盘 */
    GUI_SetTextMode(GUI_TM_TRANS);   
    GUI_SetColor(GUI_RED);
    GUI_AA_DrawArc(90,230,65,65,2,27);
    GUI_SetColor(GUI_ORANGE);
    GUI_AA_DrawArc(90,230,65,65,27,52);
    GUI_SetColor(GUI_YELLOW);
    GUI_AA_DrawArc(90,230,65,65,52,77);
    GUI_SetColor(GUI_GREEN);
    GUI_AA_DrawArc(90,230,65,65,77,102);
    GUI_SetColor(GUI_LIGHTBLUE);
    GUI_AA_DrawArc(90,230,65,65,102,127);
    GUI_SetColor(GUI_BLUE);
    GUI_AA_DrawArc(90,230,65,65,127,152);
    GUI_SetColor(GUI_MAGENTA);
    GUI_AA_DrawArc(90,230,65,65,152,177);



我切屏后,背景是重新绘制,有GUI_Init();,有GUI_Clear();修改圆弧的坐标也有反应,只是不是在正确的坐标位置, 还是像上图一样,在上方很小的显示
不知道该如何查原因了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2015-12-23 15:56:39 | 显示全部楼层

回 feiante 的帖子

feiante:void bsp_BkWindow1(void)
{
    GUI_Init();
    GUI_UC_SetEncodeUTF8();
    
....... (2015-12-22 09:36) 
先做两个简单的界面,切换下,看看有问题不,另外函数   GUI_Init();在初始化的时候仅需调用一次,不要重复调用。
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2015-12-23 17:40:40 | 显示全部楼层
做过测试,正如上面第一个和第二个图片,就是切换的效果,也就是说没有画指针时可以切换,并且没有问题。
如果画了指针,原来没有问题的图片,显示就有问题了,在屏下部分显示的圆弧,就跑到了上方了,而且变小了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 13:31 , Processed in 0.042973 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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