PySide: можно ли нарисовать сглаженную линию QPainter? - PullRequest
0 голосов
/ 08 ноября 2019

Когда я рисую линию с помощью QPainter, она неравномерно перемещается от пикселя к пикселю, даже если я применяю сглаживание. Можно ли нарисовать линию так, как вы рисуете в фотошопе, где она перемещается от пикселя к пикселю равномерно (т. Е. Приводит к серым пикселям, если положение линии не является точным значением пикселя).

Вотпример, показывающий зубчатую линию:

from PySide import QtGui

_pix = QtGui.QPixmap(640, 640)
_pix.fill('White')
_pen = QtGui.QPen("Black")

_pnt = QtGui.QPainter()
_pnt.begin(_pix)
_pnt.setPen(_pen)
_pnt.setRenderHint(_pnt.HighQualityAntialiasing, 1)
_pnt.drawLine(640.0/2-50, 10, 640.0/2+50, 640.0-10)
_pnt.end()

_pix.save('C:/temp/test.jpg', 'JPG')

Я думаю, я мог бы нарисовать изображение в 4x размере, а затем уменьшить его, но мне было интересно, есть ли способ избежать рисования всех этих лишних пикселей, которые могут быть вполнедорогой.

1 Ответ

1 голос
/ 11 ноября 2019

Использование только подсказки AntiAliasing дает гладкую линию для Qt 4:

from PySide import QtGui

qapp = QtGui.QApplication([])

_pix = QtGui.QPixmap(640, 640)
_pix.fill('White')
_pen = QtGui.QPen("Black")

_pnt = QtGui.QPainter()
_pnt.begin(_pix)
_pnt.setPen(_pen)
_pnt.setRenderHint(_pnt.Antialiasing, True)
_pnt.drawLine(640.0/2-50, 10, 640.0/2+50, 640.0-10)
_pnt.end()
_pix.save('test.jpg', 'JPG')

Draw-Line-Demo

...