快速的QPixmap缩放
Fast QPixmap scaling
我开发了一个类似浏览器的应用程序,其中画布具有较大的高度和"普通"宽度,类似于1024x999999。我使用 512 个缓存的 QPixmap 块 (1024x128) 显示图片,重复使用它们来显示新的绘图区域。因此,如果用户在大图像的某个给定区域滚动,则 CPU 不忙,则使用缓存的块。所以,这就是我的引擎的工作原理,简而言之。
想要实现缩放。不知道 - 平滑或离散(x2,x3,x4...)。性能问题:
- 有没有有效的方法可以在paintEvent()中即时扩展QPixmap而不分配太多内存?
- 或者,也许我应该考虑为不同的缩放系数缓存缩放图片的"缩放图层"?但这会使平滑缩放变得不可能...
如果您查看文档,您会发现paintEvent
实际上接收了一个QPaintEvent
对象。此对象具有一个名为 region()
的 getter 方法,该方法返回一个详细说明要重新绘制的区域的QRect
。
void QWidget::paintEvent ( QPaintEvent * event )
{
QRect region = event->region();
...
}
所以......你只需要重新绘制小部件中正好位于该矩形内的部分。
对于您的应用程序,我建议计算矩形内有多少图像,并相应地重绘它们,但只重绘这些图像。
对于缩放部分,如果图像是QPixmap
对象,Qt优化了在QPainter
对象中绘制图像的方式。或者他们说...
因此,您可以在 paintEvent()
方法中编写如下内容:
QPainter painter(this);
...
painter.drawPixmap(pos_x, pos_y, width, height, pixmap);
...
希望有帮助!
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 为什么我不能使用 Sphere 来缩放字形?
- 快速的QPixmap缩放