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

时间:2016-04-12 22:21:11

标签: qt memory qimage qpixmap

我是通过从文件加载图片来创建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 个答案:

答案 0 :(得分:1)

让我试着回答一下,也许它可以帮到你:

  1. 我很久以前就尝试了,是的,它总是32位,它将是RGB或RGBA(如果图像上有alpha,可以通过hasAlpha检查)。你可以检查的方法是检查总是返回32的QPixmap的深度。我们无法处理pixmap数据,因为它在内部处理,在QPixmap文档中有说明:
  2.   

    请注意,像素图中的像素数据是内部的,由...管理   基础窗口系统。

    1. 较小的图像将消耗较少的内存。并且你需要在缩放之后释放你的原始像素图。
    2. QPixmap是为屏幕上的绘画性能而设计的,如果你想要更好地处理IO(形成图像,减少颜色等),请使用QImage。您还可以使用画家将QImage渲染到屏幕,但与QPixmap相比,它会更慢。