我有一张图片,我想把这张图片分成n张。所以我想知道如何使用 QImage 做到这一点?或者是否有更好的(性能方面的)Qt 类来完成这项任务?
例如,假设我有一个由 1920x1080 像素组成的图像,我想将它分成 100 block ,这意味着每 block 将由 192x108 像素组成。请注意,我不想创建缩放到 192x108 的相同作品。每件作品都是主图片的一个独特部分。
我附上了一张图片以使我的问题更清楚。 此图像由 1920x1080 像素组成,每个用网格潜水的部分由 192x108 像素组成,我想将它们中的每一个都视为 QImage 对象,而不是将其实际划分为 100 block 。
有没有办法用 QImage 做到这一点?性能在这里很重要,因为我会分析每一件,通常会有超过 1000 件。
感谢您的帮助!
编辑:这两种方法都可以完美运行,但是 alexisdm 的方法稍微复杂一些,级别较低,但更快。 jmk 的方法更容易使用,但速度较慢。
感谢您的回答。
最佳答案
您可以创建一个 QImage
而无需复制任何数据,方法是使用与源图像相同的步幅(每行字节数)和格式并传递原始数据缓冲区,偏移量对应于所需的起始位置,到 QImage
的构造函数之一:
QImage createSubImage(QImage* image, const QRect & rect) {
size_t offset = rect.x() * image->depth() / 8
+ rect.y() * image->bytesPerLine();
return QImage(image->bits() + offset, rect.width(), rect.height(),
image->bytesPerLine(), image->format());
}
只要子 QImage
存在,源图像就必须存在。
但如果分析代码尝试直接访问图像原始数据而不使用 QImage::bytesPerLine()
、QImage::scanLine()
或QImage::pixel()
.
关于c++ - 将 QImage 分成更小的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681554/