qt - Image size vs sourceSize 奇怪的东西
问题描述
在 Retina 显示器下,我们遇到了一个奇怪的图像模糊问题。图像的左侧部分 - 之前,右侧 - 修复之后。
我们的 QML 代码使用此代码来显示图像:
Image {
anchors.verticalCenter: parent.verticalCenter
sourceSize.width: 25
sourceSize.height: 25
source: preview.url
}
我试图乘以sourceSize
-Screen.devicePixelRatio
图像变得更大,因此它们不适合它们的位置。
然后我sourceSize.width
用 justwidth
和相同的 for替换了height
. 所以:
Image {
anchors.verticalCenter: parent.verticalCenter
width: 25
height: 25
source: preview.url
}
现在它工作正常。
我的问题是:
是否需要
sourceSize
乘以devicePixelRatio
?还是自动管理?似乎它是为 PNG 自动管理的,而不是为 SVG 管理的。如果它已经为 PNG 自动管理(这些图像 preview.url 是 PNG)那么为什么它会模糊?原始 PNG 图像的大小为 64x64 像素。
为什么我乘以后图像变大
sourceSize
了devicePixelRatio
?
补充 #1。我data://
在图像的 URL 中使用方案。IE
QString url("data:");
url += imageMimeType;
url += ";base64,";
url += imageData.toBase64();
解决方案
在参考我在此处给您的其他答案时,我对 Qt 代码的理解是,除了此处描述的情况之外,Qt 并没有缩放该值。所以我的理解似乎与你在 1 中所说的相反。什么证据导致你做出这种说法?
假设这个概念是正确的(我可能不正确),第 2 点的原因是 Qt 正在加载适合 1x 缩放的大小。但是对于更高的因素,会有质量损失。如果您在视网膜上,那么您应该调整该值,或提供@2x 版本。
至于第3点,原因可能在文档中:“如果未指定宽度和高度属性,则图像会自动使用加载图像的大小”。因此,如果将加载图像的大小加倍,则元素的大小也会加倍,因为您没有明确设置宽度和高度。
设置宽度和高度可以解决问题,因为图像以全尺寸加载,因此缩放后可以以适当的质量绘制。
如果我对 Qt 代码的理解有误,希望其他人能纠正我。
推荐阅读
- javascript - Javascript变量不加在一起
- php - Apple Pay on Web - 商户识别符证书
- javascript - 单击以滚动可滚动 div 内的元素不起作用
- node.js - Node JS serverless rest API lambda 函数,首先执行 GET 请求,然后在满足条件时执行 POST
- python - scrapy spider 中的 2 个函数和第二个未运行
- visual-studio - 表达式必须具有指向对象的类型 - 我该怎么办?
- javascript - 谁能告诉我为什么我的最后两个 if else 语句不起作用?全新的 JavaScript 在这里
- python - 使用 python beautifulsoup 从 html 中获取指定值
- userscripts - 如何将本地 CSS 文件加载到特定站点
- c++ - 迷宫构造器问题 [线程 1:EXC_BAD_ACCESS(代码=1,地址=0x8)]