使用 QGraphicsView 或 QGraphicsScene 在较大图像中叠加图像
Overlaying image within larger image using QGraphicsView or QGraphicsScene
我是Qt的新手,所以我可能会解决这个问题。 话虽如此——
我正在子类化的QGraphicsView中渲染图像。 我使用 addPixmap() 将图像作为 Pixmap 添加到场景中。 我想在特定位置将较小的图像叠加(blit)在较大的图像之上。 我也可以通过再次调用addPixmap()将较小的图像添加到场景中,但它始终显示在左上角。 我想自己设置这些坐标。
我怎样才能做到这一点?
谢谢!
QGraphicsScene::addPixmap
返回指向添加的 QGraphicsPixmapItem 的指针。如果要设置其位置,可以执行以下操作:
QGraphicsPixmapItem *item = scene->addPixmap(yourPixmap);
item->setPos(50, 50); // sets position to scene coordinate (50, 50)
如果要将图像叠加在其他图像之上,请确保您了解 z 值。有关详细信息,请参阅 QGraphicsItem 文档。基本上,z 值决定了堆叠顺序。
最后,熟悉QGraphicsItems的育儿方式。当QGraphicsItem具有父项时,这意味着(除其他外)其坐标以其父项的坐标表示。因此,如果某个项的位置为 (0, 0),但它是场景位置为 (50, 50) 的项的子项,则该子项将显示在 (50, 50)。因此,给定上述示例,您可以执行以下操作:
QGraphicsPixmapItem *childItem = new QGraphicsPixmapItem(item);
这将创建一个新项"子项",其父项是"项"。它的坐标是(0,0),因为它们尚未设置,但它的场景坐标是(50,50),因为它是"item"的子项。请注意,指定项目的父项时,无需将子项添加到场景中;它是隐式添加的。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 视差图和校正图像之间的叠加
- 在 Dlib 中,如何保存带有叠加层的图像
- 使用 QGraphicsView 或 QGraphicsScene 在较大图像中叠加图像
- 叠加在4通道图像上
- 在黑色图像上叠加精明的边缘
- 如何将一个图像叠加在另一个图像上?c++