Convert qt array coordinates into curve graph

A curve data was generated by the tool. Now I want to turn the data into a picture, so I wrote a function. The array coordinate points are

 QList<QPointF> m_vecData;

The data for reading data has been omitted, just write it yourself.

std::string xxxxxxxx::GetDataImage()
{
    if(m_vecData.size()>0)
    {
        //QSize iconSize(1000, 500);
        QSize iconSizeImage(1061, 623);
        QPixmap pix(iconSizeImage);
        pix.fill(QColor(86, 86, 86));
        {
            QPainter painter(&pix);
            painter.setPen(Qt::green);
            float yMM = max(abs(m_max_y),abs(m_min_y))*2;
            if(yMM==0)
                yMM = 1;
            QVector<QPointF> vecPoints;
            {
                float nyRobitMin = -(m_vecData[0].y()/yMM*iconSizeImage.height()/2)+iconSizeImage.height()/2;

                vecPoints.append(QPointF(0.f, ( nyRobitMin) /  iconSizeImage.height()/2));
                for (float i = 0; i < m_vecData.size(); i ++)
                {
                    float nyCurrentRobitMin = -(m_vecData[i].y()/yMM*iconSizeImage.height()/2)+iconSizeImage.height()/2;
                    QPointF p(i*(float)iconSizeImage.width()/(float)m_vecData.size(), nyCurrentRobitMin);
                    vecPoints.append(p);
                    vecPoints.append(p);
                    qDebug("curveline x = %f,y = %f",i*(float)iconSizeImage.width()/(float)m_vecData.size(),nyCurrentRobitMin);
                }
                float nyRobitMax = -(m_vecData[m_vecData.size()-1].y()/yMM*iconSizeImage.height()/2)+iconSizeImage.height()/2;
                vecPoints.append(QPointF(1.f*iconSizeImage.width(),nyRobitMax));
            }
            painter.drawLines(vecPoints);
            painter.end();
        }
        string strImageUrl = "E:/CurveTestData/temp.png";
        pix.save(strImageUrl.c_str());
        return strImageUrl;
    }

    return "";
}

Original graph:

Restored graph

 

 

Guess you like

Origin blog.csdn.net/qq_30377315/article/details/126955882