Qt 获取受drawLine()或QLineF影响的点列表
如何获取drawLine()函数影响的点/坐标列表?例如,如果我有Qt 获取受drawLine()或QLineF影响的点列表,qt,qt4,qpainter,Qt,Qt4,Qpainter,如何获取drawLine()函数影响的点/坐标列表?例如,如果我有 QLineF line(10.0, 80.0, 90.0, 20.0); QPainter(this); painter.drawLine(line); 我想得到drawLine()将绘制的QPoint坐标列表。我知道,但是我需要在更一般的情况下使用它,在这种情况下,我可以设置不同的QPen和QBrush: painter.setPen(QPen(myColor, myWidth, Qt::SolidLine, Qt::Rou
QLineF line(10.0, 80.0, 90.0, 20.0);
QPainter(this);
painter.drawLine(line);
我想得到drawLine()将绘制的QPoint坐标列表。我知道,但是我需要在更一般的情况下使用它,在这种情况下,我可以设置不同的QPen和QBrush:
painter.setPen(QPen(myColor, myWidth, Qt::SolidLine, Qt::RoundCap));
我还需要它与其他程序保持一致,这些程序可能会绘制具有相同端点和参数的直线,但没有Qt,因此我希望最终得到相同的结果,并且没有一个差
注意:这与不同,因为我需要受绘图功能影响的所有像素,而不仅仅是多边形/路径的顶点
更新:我认为可以将QImage或QPainterDevice和QPaintEngine子类化,以捕获所有“setPixel()”操作。有没有人能证明或者确认,甚至可以写一个简短的代码来实现这一点?不确定您的性能要求,但您可以在屏幕外渲染线条,然后查看图像以查看绘制了哪些像素。下面是一个打印从190190到210210的400x400图像上3像素线之间绘制的像素的示例 使用QImage时,请确保出于性能原因使用scanLine()函数
#include <QCoreApplication>
#include <QImage>
#include <QPainter>
#include <QDebug>
int main(int argc, char *argv[])
{
QImage image(400,400,QImage::Format_ARGB32);
QPainter painter;
painter.begin(&image);
painter.fillRect(0,0,400,400,QBrush(Qt::white));
QBrush brush(Qt::black);
QPen pen(brush, 3.0);
painter.setPen(pen);
painter.drawLine(190,190,210,210);
painter.end();
for (int i=0;i<image.height();i++) {
const uchar *scanLine = image.scanLine(i);
for (int j=0;j<image.width()*4;j+=4) {
if ( scanLine[j] == 0 ) {
qDebug() << "pixel" << i << j/4 << scanLine[j];
}
}
}
return (0);
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
QImage图像(400400,QImage::格式_ARGB32);
油漆工;
画师。开始(&图像);
painter.fillRect(0,0400400,QBrush(Qt::白色));
QBrush刷(Qt::黑色);
QPen笔(刷子,3.0);
画师:画笔;
画师.画线(190210210);
结束();
对于(int i=0;i在Qt程序中覆盖的精确像素甚至不一定一致。如果在QPainter
上启用抗锯齿,则情况会有所不同;如果绘制到QGLWidget
,则情况会有所不同,并且可能会因程序运行的平台而异,因为Qt具有不同的<代码>QPaintEngine
不一定产生完全相同输出的实现
简言之,你所要求的是不可能的。你只能找到特定绘制操作所覆盖的像素,你只能通过mzelina建议的方法来实现这一点。谢谢,但这还不够快。我需要将我的Qt GUI与matlab通信。因此发送像素坐标更好,我现在做的就是这样做是的,我只想让特定的绘制操作覆盖像素,我不需要不同版本/平台的像素相同,我只想使用Qt提供的可用渲染引擎,让特定的绘制操作覆盖像素。但我不认为mzelina的方法是唯一的方法解析,因为我希望(QImage->data)不是由QPainter直接访问的。