【问题标题】:QPainter::drawPixmap() doesn't look good and has low quality?QPainter::drawPixmap() 不好看而且质量低?
【发布时间】:2016-08-22 00:17:42
【问题描述】:

我正在尝试用QPainter::drawPixmap()QWidget 内绘制一个图标(.png) :

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

但与QLabel(例如)和较小尺寸(在我的情况下为 19*19)相比,结果并不完美。

我能做什么?

****编辑****

QLabel 像素图 @ 大小为 19*19:

我的绘画@尺寸 19*19 通过SmoothPixmapTransform 渲染类型:

【问题讨论】:

    标签: qt qwidget qpainter qpixmap qt5.5


    【解决方案1】:

    您设置了错误的渲染提示,您需要QPainter::SmoothPixmapTransform 才能平滑调整大小。默认情况下使用最近邻法,这种方法速度快,但质量非常低,并且会像素化结果。

    QPainter::HighQualityAntialiasing 用于绘制线条和填充路径等,即光栅化几何图形时,它对绘制光栅图形没有影响。

    编辑:似乎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);
    

    此代码产生以下结果:

    第二个和第三个图像之间几乎没有任何区别,手动将源图像缩放到所需的尺寸并绘制它会产生最佳效果。这肯定是不对的,从SmoothTransformation 预计会产生相同的结果,但由于某种原因它的缩放不如QPixmapscale() 方法。

    【讨论】:

    • 谢谢。我试过你说的但结果是一样的!
    • @IMAN4K 原图有多大?
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2015-07-21
    相关资源
    最近更新 更多