《QDebug 2025年9月》
QImage类缩放有两个策略,FastTransformation(类似临近插值,放大图像可惜看到清晰的像素颗粒,缩小会丢失细节)和SmoothTransformation(类似线性插值,放大会有抗锯齿,缩小保留更多的细节)。QML的Image组件有两个影响图像缩放质量的重要参数,smooth和mipmap。smooth默认true,会影响放大和缩小效果。mipmap默认false,会影响缩小效果
一、Qt Widgets 问题交流
1.
二、Qt Quick 问题交流
1.图片缩放问题
QImage类缩放有两个策略,FastTransformation(类似临近插值,放大图像可惜看到清晰的像素颗粒,缩小会丢失细节)和SmoothTransformation(类似线性插值,放大会有抗锯齿,缩小保留更多的细节)。
QML的Image组件有两个影响图像缩放质量的重要参数,smooth和mipmap。smooth默认true,会影响放大和缩小效果,对应到QSGTexture/QSGTextureMaterial的setFiltering(),=true平滑就是QSGTexture::Linear,=false就是QSGTexture::Nearest。mipmap默认false,会影响缩小效果,对应到QSGTexture/QSGTextureMaterial的setMipmapFiltering(),=true生成多级渐远纹理。
参考Qt5 QSGTexture源码:
// linear对应smooth
bool linear = d->filterMode == Linear;
GLint minFilter = linear ? GL_LINEAR : GL_NEAREST;
GLint magFilter = linear ? GL_LINEAR : GL_NEAREST;
// hasMipmaps()对应mipmap
if (hasMipmaps()) {
if (d->mipmapMode == Nearest)
minFilter = linear ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST_MIPMAP_NEAREST;
else if (d->mipmapMode == Linear)
minFilter = linear ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_LINEAR;
}
funcs->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
funcs->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
smooth和mipmap都关掉的时候类似QImage的FastTransformation,smooth和mipmap都开启的时候类似QImage的SmoothTransformation,但是细节保留没那么好。
下面是三个缩放图,有横竖三条黑色线段,1是smooth=false,mipmap=false;2是mipmap=true;3是QImage SmoothTransformation,效果最好的就是SmoothTransformation,但如果考虑到渲染效率直接用mipmap好点。

如果我们选择用QSGSimpleTextureNode来渲染图片的话,会发现setMipmapFiltering设置没效果,因为他内部的material设置了setMipmapFiltering(QSGTexture::None)。
三、其他
1.
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)