如何在使用 Qt 缩放 Image/Picture 时减少噪音

How to Reduce the noisy While Scale a Image/Picture with Qt

我使用代码就像:

void MyLabel::paintEvent(QPaintEvent *event){
    QPainter painters(this);
    /*对img进行平滑缩放*/
     int image_width,image_height;
     image_width = width();
     image_height = height();
     QImage result = img.scaled(image_width<<2,
         image_height<<2).scaled(image_width,
                image_height,Qt::IgnoreAspectRatio,Qt::SmoothTransformation
                );
    painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(img));
    }

我想将图像缩放到我想要的大小,但是当我将它缩放到非等比例时,发生了可怕的事情,噪音很大,image/picture就像这样:

我想知道如何获得像这样缩放 image/picture 的方法:

我怀疑这是因为你调用了 QImage::scaled() 两次,第一次是放大到所需大小的 4 倍,第二次是你实际需要的大小。第一次调用使用转换模式的默认值(即 Qt::FastTransformation)。所以本质上你是在结合一个 non-smooth 和一个平滑的转换。请注意,无论如何,第一个转换应该是不必要的。使用 Qt::SmoothTransformation.

立即缩放到所需的大小
QImage result = img.scaled(image_width, image_height,
                           Qt::IgnoreAspectRatio,
                           Qt::SmoothTransformation);

编辑:刚刚注意到其他事情。查看您的 drawPixmap 行:

painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(img));

当您打算绘制 result:

时,您正在绘制原始 img
painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(result));