2016-04-27 4 views
1

Я пытаюсь нарисовать иконку (.png) внутри QWidget с QPainter::drawPixmap() :QPainter :: drawPixmap() не выглядит хорошо и имеет низкое качество?

QPixmap _source = "/.../.png"; 
painter.setRenderHint(QPainter::HighQualityAntialiasing); 
painter.drawPixmap(rect(), _source); 

, но в сравнении с QLabel (к примеру) и в нижнем размер (19 * 19 в моем случае) результат не является совершенным.

Что я могу сделать?

**** **** Редактировать

QLabel с пиксельной карты @ размер 19 * 19:

enter image description here

Моя живопись @ размер 19 * 19 с помощью SmoothPixmapTransform визуализации типа:

enter image description here

ответ

2

Вы задаете неправильный намек рендера, вам нужно QPainter::SmoothPixmapTransform чтобы получить плавное изменение размера. По умолчанию используется метод ближайшего соседа, который является быстрым, но имеет очень низкое качество и пикселирует результат.

QPainter::HighQualityAntialiasing предназначен для рисования линий и путей заполнения и т. Д., Например, при растрировании с использованием бэкэнда OpenGL, он не влияет на рисование растровой графики.

EDIT: Кажется, есть только так много SmoothPixmapTransform может сделать, и когда конечный результат настолько малы, что не так много:

QPainter p(this); 
    QPixmap img("e://img.png"); 
    p.drawPixmap(QRect(50, 0, 50, 50), img); 
    p.setRenderHint(QPainter::SmoothPixmapTransform); 
    p.drawPixmap(QRect(0, 0, 50, 50), img); 
    img = img.scaled(50, 50, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); 
    p.drawPixmap(100, 0, img); 

Этот код дает следующий результат:

enter image description here

Существует едва ли разница между вторым и третьим изображением, вручную масштабируя исходное изображение до требуемых размеров, и его рисование дает наилучший результат. Это, конечно, не так, от SmoothTransformation ожидается получение того же результата, но по какой-то причине его масштабирование уступает scale() методу QPixmap.

+0

Thanks.i попробовал то, что вы сказали, но результат тот же! – IMAN4K

+0

Я обновил свой вопрос – IMAN4K

+0

@ IMAN4K насколько велика оригинальная картина? – dtech

Смежные вопросы