QT实现目标图片取模

根据轴长以及显示点数,可以得到目标图像的分辨率,也可以是目标图片的大小。我们使用的是POV led设备显示图片,轴长为24显示点,即外圈显示多少个点?216个点。

轴为围绕中心旋转,所以我需要在图片中心位置为中点,然后向外画轴,找到轴上点的坐标,以及该像素在图片中的颜色,将同一轴上的点组成一组数据,用于POVLED设备显示图像。

首先我们需要画一个直径为70的圆,外圈大概是219点。

QSize size(70,70); //定义图片大,定一个图片文件 QImage image(size,QImage::Format_ARGB32); image.fill(Qt::white); QPainter painter(&image); QPen ppen = painter.pen(); ppen.setColor(Qt::black); painter.setPen(ppen); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawEllipse(0,0,69,69); //绘制一个70的圆 for(uchar i=0;i < 70;i++ ) //遍历图片像素,打印出外圈上的点的坐标 { qDebug()<<i<<":"<<"..........................."; for(uchar j=0;j<70;j++) { if(image.pixel(i,j) == 0xff000000) { qDebug()<<i<<","<<j; } } //qDebug()<< i <<":"<<QString("%1").arg(image.pixel(1,i),8,16,QLatin1Char('0')) <<endl; }

我们找到外圈上的点后,需要找出圆心到外圈点轴上的点的坐标,以便载入图片得到轴对应点的颜色。

painter.drawLine(35,35,pQSpBox->value(),pSpBox->value());            //画中心到圆边沿的点的直线

    image.save("C:/Users/Administrator/Desktop/myImageDa.png");
    //qDebug() << imageDa.valid(47,47);

    qDebug()<<"("<<pQSpBox->value()<<","<<pSpBox->value()<<")"<<":"<<"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";
    for(uchar i = 0;i < 70;i++)                        //打印出各个轴对应点的坐标
    {
        for(uchar j = 0;j < 70;j++)
        {
            if(image.pixel(i,j) == 0xff000000)
            {
                qDebug()<<i<<","<<j;

            }
        }
    }

最后一步是加载目标图片并取得轴上点的像素值得到轴数值。

也没有更好的方法实现这个功能,但是现在这个方法原理简单,工作量大,但是程序效率高,而且达到功能的效果好。

画轴的上位机是这个样子,途中绘制了35,35 到48,62的点轴。

捕获

posted @ 2021-05-25 10:01  steven_lg  阅读(463)  评论(0)    收藏  举报