我正在用TouchGFX创建一个波形小部件,但不确定如何最好地在结束时将波形循环回零,因为有三个帧缓冲区,所以你必须在一个区域内无效三次,否则会出现闪烁。如何处理将数组循环回到开始位置(x=0)。
主要问题是我的代码最初假设只有一个帧缓冲区。我认为我的代码需要针对三个帧缓冲区进行重构,或者添加直接写入帧缓冲区的功能。任何提示都将不胜感激。
bool Graph::drawCanvasWidget(const Rect& invalidatedArea) const
{
if (numPoints < 3)
{
// A graph line with a single (or not even a single) point is invisible
return true;
}
else{
Canvas canvas(this, invalidatedArea);
for (int index = 0; index < (numPoints-1); index++)
{
canvas.moveTo(points[index].x,points[index].y);
canvas.lineTo(points[index].x,points[index+1].y);
canvas.lineTo(points[index+1].x,points[index+1].y);
canvas.lineTo(points[index+1].x,points[index].y);
}
return canvas.render(); // Shape above automatically closed
}
return true;
}
void Graph::newPoint(int y)
{
if(numPoints==501){
numPoints=0;
}else if ((maxPoints-numPoints)<=20){
points[numPoints].x = numPoints;
points[numPoints].y = y;
Rect minimalRect(480,0,20,100);
invalidateRect(minimalRect);
numPoints++;
}else{
points[numPoints].x = numPoints;
points[numPoints].y = y;
Rect minimalRect(numPoints-3,0,20,100);
invalidateRect(minimalRect);
numPoints++;
}
}发布于 2020-10-09 02:55:27
随着TouchGFX 4.15.0 (刚刚发布)的发布,TouchGFX设计器现在支持一个图形小部件(以前只能在演示中的源代码中找到),它可以用来生成波形。它有一些更优雅的插入点方法,可以满足你的需要。
https://stackoverflow.com/questions/59288534
复制相似问题