Qt 圆形图像 图像缩放 QPixmap QImage
1 void CommentDialog::getRoundQPixmap(QPixmap & src, QPixmap & mask, QSize size){ 2 QImage resultImage(size, QImage::Format_ARGB32_Premultiplied); 3 QPainter painter(&resultImage); 4 painter.setCompositionMode(QPainter::CompositionMode_Source); 5 painter.fillRect(resultImage.rect(), Qt::transparent); 6 painter.setCompositionMode(QPainter::CompositionMode_SourceOver); 7 painter.drawPixmap(0, 0, mask); 8 painter.setCompositionMode(QPainter::CompositionMode_SourceOut); 9 if ((src.height() / 4 > size.height()) && (src.width() / 4 > size.width())){ 10 src = src.scaled(src.height() / 4, src.height() / 4); 11 } 12 painter.drawPixmap(0, 0, src.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); 13 src = QPixmap::fromImage(resultImage); 14 }
第4行设置mask图片,src显示的形状由mask决定
9~12行可以将较大的图片快速缩小到指定大小,并且具有较高的质量。
1 //另一种方法使用QImage。这个没加缩放优化 2 QImage getRoundQImage(QImage & src, QImage & mask, QSize size) 3 { 4 QImage resultImage(size, QImage::Format_ARGB32_Premultiplied); 5 src = src.scaled(size); 6 QPainter painter(&resultImage); 7 painter.setCompositionMode(QPainter::CompositionMode_Source); 8 painter.fillRect(resultImage.rect(), Qt::transparent); 9 painter.setCompositionMode(QPainter::CompositionMode_SourceOver); 10 painter.drawImage(0, 0, mask); 11 painter.setCompositionMode(QPainter::CompositionMode_SourceOut); 12 painter.drawImage(0, 0, src); 13 painter.setCompositionMode(QPainter::CompositionMode_DestinationOver); 14 painter.end(); 15 return resultImage; 16 }