一、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.
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐