2016-08-01 4 views
1

Ich verwende qt für die Entwicklung einer einfachen Zeichenanwendung.Ermitteln des von qpen abgedeckten Pixelindexes bei Verwendung von qpainter auf qimage

Ich habe ein qImage und füllte es als transparent.

QImage *m_markerImg = new QImage(400,320, QImage::Format_ARGB32_Premultiplied); m_markerImg -> fill(Qt::transparent);

Ich habe eine benutzerdefinierte Grafikszene erstellt, indem es von qgraphicsscene vererben & auf diesem Bild eine Linie zu zeichnen in dem mousemove- Fall Grafikszene wie:

QPointF plotPoint = mouseEvent->scenePos(); m_painter.drawLine(m_initPoint,plotPoint); m_initPoint=plotPoint;

wo m_initPoint zu sein, ist zugewiesen in Maus drücken Ereignis. Alles funktioniert gut und ich kann über dieses Bild Linien zeichnen. Jetzt möchte ich die Pixel, die von dieser Linie abgedeckt werden, zur Laufzeit speichern, d. H. Während der Linienzeichnung. Obwohl ich die Punkte, auf denen ich zeichne, dh m_initPoint & plotPoint speichern kann, aber im Falle von penwidth auf mehr als 1 gesetzt ist, dann werde ich nur ein einzelnes Pixel bekommen, während ich die ganzen Pixel benötigt, die durch die Breite abgedeckt sind Linie.

Wie kann ich das bekommen?

Antwort

0

Sie müssen:

  1. Konvertieren Sie die Linie auf einen Pfad,
  2. Stroke der Weg QPainterPathStroker (siehe auch this example) verwenden,
  3. den strich Pfad als Polygon holen
  4. Scan (iterieren) die Pixel des Polygons - siehe this question für ein komplettes Beispiel.
+0

Sorry Kuba Ober, aber ich weiß nicht, wie man die Linie streichelt. Kannst du mir bitte mehr Infos dazu geben? –

+0

@ShubhamSaini Ich habe relevante Dokumentation/Beispiele verlinkt. –

+0

Vielen Dank für das Problem, ich werde Ihre Lösung versuchen. Für den Moment habe ich es gelöst, indem ich die nahegelegenen Pixel in der Nähe wiederhole. d. h. ich führe Schleifen auf den Pixeln in der Nähe aus, überprüfe ihre Farbe und wenn sie die gleiche Farbe haben, wie ich sie angewendet habe, füge ich sie in QList an. Es löst mein Problem. –

Verwandte Themen