首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速QPixmap标度

快速QPixmap标度
EN

Stack Overflow用户
提问于 2012-05-25 09:55:20
回答 1查看 2.2K关注 0票数 2

我开发了一个类似浏览器的应用程序,其中画布具有很大的高度和“普通”宽度,类似于1024x999999。我使用512个高速缓存的QPixmap块(1024x128)显示图片,并重新使用它们来显示新的绘图区域。因此,如果用户在大图像的某个给定区域滚动,CPU不忙,则使用缓存块。简单地说,这就是我的引擎的工作原理。

想要实现缩放。不知道-光滑或离散(x2,x3,x4.)业绩问题:

  • 是否有任何有效的方法可以在不分配太多内存的情况下快速缩放QPixmap in paintEvent()
  • ,还是我应该考虑一下“缩放层”,即缓存缩放图像以适应不同的缩放因素?但这使得平滑缩放的impossible...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-25 17:51:59

如果您查看文档,您将看到paintEvent实际上接收到了一个QPaintEvent对象。这个对象有一个名为region()的getter方法,它返回一个详细说明要重新绘制的区域的QRect

代码语言:javascript
复制
void QWidget::paintEvent ( QPaintEvent * event )
{
  QRect region = event->region();
  ...
}

所以..。您只需要重新绘制小部件的一部分,它正是位于中的中的那个矩形。

对于您的应用程序,我建议计算矩形中的哪个或多个图像,并相应地重新绘制它们,但只重绘这些图像。

对于缩放部分,Qt优化了在QPainter对象中绘制图像的方式(如果图像是QPixmap对象)。或者他们这么说..。

因此,您可以在paintEvent()方法中编写如下内容:

代码语言:javascript
复制
QPainter painter(this);
...
painter.drawPixmap(pos_x, pos_y, width, height, pixmap);
...

希望能帮上忙!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10752284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档