有关函数GUI_MEMDEV_DrawAuto()的问题
该设备能自动识别显示屏的哪一部分包含固定的对象,哪一部分包含移动或改变的对象(必须更新)。当绘图函数第一次被调用时,所有的对象都被绘制出。而以后的函数调用只更新需要移动或改变的物体。
/* Do the actual drawing */
pAutoDevInfo->DrawFixed = 1;//由于这里为1,导致又会调用pfDraw函数里的
if (GUI_MEMDEV_Draw(&pAutoDev->rView, pfDraw, pData, 0, GUI_MEMDEV_NOTRANS)) {
return 1;
}
pAutoDevInfo->DrawFixed = 0;
pAutoDev->FirstCall = 0;
return 0;
绘图函数
void _Draw(void * p) {
PARAM * pParam = (PARAM *)p;
/* Fixed background */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_ClearRect ((800 - (int)_bmScaleR140.XSize) / 2,
(480 / 2 - 50) + _bmScaleR140.YSize,
(800 - (int)_bmScaleR140.XSize) / 2 + _bmScaleR140.XSize,
(480 / 2 + 50));
GUI_DrawBitmap(&_bmScaleR140,
(800 - (int)_bmScaleR140.XSize) / 2,
(480 / 2 - 50));
printk("\n draw \n");//通过打印信息,发现每次都会打印这个信息
}
/* Moving needle */
GUI_SetColor(GUI_WHITE);
GUI_AA_FillPolygon(pParam->aPoints,
countof(_aNeedle_1),
MAG * (800 / 2),
MAG * (480 / 2 + 90));
/* Fixed foreground */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_Font24B_ASCII);
GUI_DispStringHCenterAt("MPH / 10", 800 / 2, (480 / 2 + 10));
}
}
根据那个打印信息,可以看到他每次都调用
GUI_DrawBitmap(&_bmScaleR140,
(800 - (int)_bmScaleR140.XSize) / 2,
(480 / 2 - 50));
这个函数,那岂不是会很大程度上影响效率问题呢?