【问题标题】:Maximum Size of QPixmap/QImage WindowsQPixmap/QImage 窗口的最大尺寸
【发布时间】:2011-02-11 11:09:19
【问题描述】:

我有一个用于非常广泛的 QGraphicsScene 的 QGraphicsView。我需要在 drawBackground() 中绘制背景,并且背景有点复杂(长循环),尽管它不需要不断地重新绘制。我将它存储在函数drawBackground()内的静态QPixmap(我也尝试过QImage)中,并且该pixmap是我在视图的画家上绘制的。只有在需要时才重新绘制 QPixmap。

如果我不使用静态像素图,例如,每次我横向滚动时都会生成复杂的背景。问题是,显然 Windows 上的像素图有一个最大宽度,在我的计算机上是 32770。我可以存储像素图列表并将它们并排绘制,但它会使代码更难看,我也不知道是什么像素图的最大宽度适用于每台 Windows 机器。由于这可能是一个众所周知的问题,我想知道是否有人有更好的解决方案。

谢谢。

【问题讨论】:

    标签: c++ winapi qt


    【解决方案1】:

    您可能可以通过使用未加速的光栅绘制设备来避免窗口限制,但 32770*1024 是 100MiB 的像素图;即使 Windows 允许,您也可能不想这样做。

    您已经想到了通常的答案(将其平铺成更合理大小的块并按需加载/生成它们)。通常解决方案的另一部分是使用 QPixmapCache 之类的东西来保留最近使用的图块,这样您就不会过于频繁地重新生成它们(仅当用户滚动很长时间时)。

    您没有说您的复杂背景有多复杂,但您可能还想查看 Mandelbrot 设置示例,了解如何在不阻塞 UI 的情况下按需分段渲染(无限)大背景像素图。

    【讨论】:

      【解决方案2】:

      这是平铺模式的常见用例。基本上你将背景分割成小图像。

      我不确定您为什么认为“它会使代码更难看”。它当然不是单行的。根据您是否有固定大小的背景图片,平铺代码通常非常简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        相关资源
        最近更新 更多