QPixmap 内存大小取决于文件大小

QPixmap memory size depending on fle size

我正在通过从文件加载图像来创建 QGraphicsPixmapItems

bool PixMapItem::loadItemFromFile(const QString &filename)
{
    QPixmap p;
    if(!p.load(filename))
        return false;
    setPixmap(p);
#ifdef NOT_QT_4
    m_itemSize = p.size()/p.devicePixelRatio();
#else
    m_itemSize = p.size();
#endif
    return true;
}

来电者:

item->loadItemFromFile(filename);
item->adjustForMaxSize(maxSize);

我想知道项目使用的内存如何取决于图像文件大小。

1) 图像类型 - 存储在项目中的 Pixmap 的编码是最小的还是总是 32 位的,或者有什么方法可以设置它?

2) 假设项目在加载后立即调整大小以匹配特定大小(见上文),实际图像大小会影响项目内存大小吗?如果我缩放像素图而不是项目本身,内存大小会更好吗?

让我试着回答一下,也许对你有帮助:

  1. 我很久以前试过,是的,它总是 32 位,它将是 RGB 或 RGBA(如果图像上有 alpha,可以通过 hasAlpha 检查)。您可以检查的方法是检查 QPixmap 的深度,它总是 return 32。我们无法对像素图数据做任何事情,因为它在内部处理,这在他们的 QPixmap 文档中有说明:

Note that the pixel data in a pixmap is internal and is managed by the underlying window system.

  1. 图片越小,内存消耗越小。并且你需要在缩放后释放你的原始像素图。

QPixmap 是为在屏幕上绘制性能而设计的,如果你想更好地处理 IO(格式化图像、减少颜色等),请使用 QImage。您还可以使用 painter 将 QImage 渲染到屏幕,但与 QPixmap 相比它会更慢。