QT消除锯齿方法Anti-Aliasing

应用方向:QT显示图片

一般而言,由于图片大小不定,但是QT界面显示的大小是固定的,消除锯齿有两种:

  • 改变图片的比例适应,界面的大小,而且显示是一般不会刚好契合,会有留边,这时不设置会默认父类为背景色,也可以设置
  • 保持图片的比例(可能会缩放),让界面的大小改变去适应图片比例。

常用软件,两种都会使用。由于个人需要,这边主要记录第一种情况。

实际上并没有改变图片的形状大小,只是改变在界面显示的情况。

//! Anti-Aliasing
//! 目标图片image
//! KeepAspectRatio:保存图片比例
//! SmoothTransformation使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法
//! x:宽留边位置
//! y:高留边位置
//! rect:重写rect主要为了居中
//! objectives:image
//! KeepAspectRatio:keep picturee ratio
//! SmoothTransformation:Use smooth pixmap transformation algorithm(bilinear interpolation algorithm)
//! x:the width gap length
//! y:the height gap length
//! rect:Rewriting rect is mainly to center the video
QImage img = image.scaled(this->width(),this->height(),Qt::KeepAspectRatio, Qt::SmoothTransformation);
int x = this->width() - img.width();
int y = this->height() - img.height();
QRect rect(0,0,this->width()-x,this->height()-y);
QPainter painter(this);
//! set backbackground-color
//! Principe:first darw a background-color as the gap color,and then draw image,
//! the background-color is usually black,and if not set, the Parent background-color
//! drawRect:I don't know why it needs to be fixed,but it's the only way to display 
//! properly.

//QColor color;
//color.setRgb(105,105,105,255);
//painter.setBrush(color);
//painter.drawRect(-1, -1, this->width()+1, this->height()+1); //先画成白色
painter.drawImage(rect,img);

附:设置setBrush颜色方式

QColor color;
color.setRgb(105,105,105,255);
painter.setBrush(color);
tag(s): QT
show comments · back · home
Edit with Markdown