尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
Trying to split an image into several blocks with QPixmap from the Qt lib. Is there anything I don't understand about the way his copy method works?
我想在3x3、4x4或5x5大小的qgridlayout中排列图像的片段(400px x 400px(,以完全表示它。我使用qpixMap中的Qlist存储每个片段。此列表中充满了一个函数,其中我输入完整映像的qpixMap和所需的剪切尺寸。
CustomWidget Attribut:
QList<QPixmap> imgFragments;
相关方法:
void CustomWidget::fragmentImage(const QPixmap &pm, int cuttingNumber) {
int fragmentSize = pm.height() / cuttingNumber;
for (int i = 0; i < boardSize; ++i) {
for (int j = 0; j < boardSize; ++j) {
int x0 = i * fragmentSize;
int y0 = j * fragmentSize;
int x1 = x0 + fragmentSize;
int y1 = y0 + fragmentSize;
imgFragments.push_back(pm.copy(x0, y0, x1, y1));
qDebug() << x0 << ", " << y0 << ", " << x1 << ", " << y1 << endl;
}
}
}
customwidget ctor:
Widget::Widget(QWidget* parent) : QWidget(parent)
{
setFixedSize(400, 400);
QPixmap pm;
if (!pm.load(":/img"))
qDebug() << "NULL" << endl;
QGridLayout* layout = new QGridLayout;
setLayout(layout);
int cuttingNumber = 4;
fragmentImagePixmap(pm, cuttingNumber);
int gap = 0;
for (int i = 0; i < cuttingNumber; ++i) {
for (int j = 0; j < cuttingNumber; ++j) {
QLabel* lbl = new QLabel;
lbl->setPixmap(imgFragmentsPixmap.at(gap + j));
layout->addWidget(lbl, j, i);
}
gap += cuttingNumber;
}
}
不幸的是,我仅通过在4x4中切割图像来进行测试就遇到了问题。for循环中使用的尺寸似乎很好,但是当显示16个块时,图像的一部分似乎会重复。(我明确将调试线留在代码中(
如果有人可以帮助我,那真的很好。预先感谢您关注这个问题。
来自文档中您使用的成员函数的文档被声明为...
QPixmap QPixmap::copy(int x, int y, int width, int height) const
因此,第三和第4个参数分别是宽度和高度 - 而不是您似乎假设的右下角的坐标。更改...
imgFragments.push_back(pm.copy(x0, y0, x1, y1));
to ...
imgFragments.push_back(pm.copy(x0, y0, fragmentSize, fragmentSize));
相关文章:
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- OpenGL应用程序在不同的计算机上的工作方式不同
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- wait_until在主线程而不是主线程中的工作方式不同吗? c ++
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 查找函数在unordered_map中的工作方式是搜索键值
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 容器类别在STL中的工作方式
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 不了解C 集合的工作方式
- 有人可以解释C 操作员=此处的工作方式
- 了解 declval 在copy_assignment情况下的工作方式
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 了解文件页在技术级别的工作方式
- 战俘的工作方式不同,详细解释
- 切换到新编译器后,SSCANF 的工作方式有所不同
- 为什么三元运算符在编译时的工作方式与运行时不同?
- 对运算符删除覆盖的工作方式感到困惑
- 在两种情况下,铸造的工作方式不同