如何在使用 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));
我使用代码就像:
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));