由于std :: rotate_copy,程序崩溃了

时间:2014-11-20 08:23:13

标签: c++ algorithm qt rotation

我试图将两个凸轮相邻,旋转90°。显示两个凸轮工作正常,但如果我想旋转凸轮,程序崩溃。 使用QByteArray读取相机并显示QCamera变量。 您可以选择在取景器中显示相机,因此它具有以下代码:

QActionGroup *videoDevicesGroup = new QActionGroup(this);
videoDevicesGroup->setExclusive(true);
foreach(const QByteArray &deviceName, QCamera::availableDevices()) {
    QString description = camera->deviceDescription(deviceName);
    QAction *videoDeviceAction = new QAction(description, videoDevicesGroup);
    videoDeviceAction->setCheckable(true);
    videoDeviceAction->setData(QVariant(deviceName));
    if (cameraDevice.isEmpty()) {
        cameraDevice = deviceName;
        videoDeviceAction->setChecked(true);
    }
    ui->menuDevices->addAction(videoDeviceAction);
}
    connect(videoDevicesGroup, SIGNAL(triggered(QAction*)), SLOT(updateCameraDevice(QAction*)));
if (cameraDevice.isEmpty())
{
    camera = new QCamera;
}
else
{
    camera = new QCamera(cameraDevice);
}
connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(updateCameraState(QCamera::State)));
connect(camera, SIGNAL(error(QCamera::Error)), this, SLOT(displayCameraError()));
camera->setViewfinder(ui->viewfinder);
updateCameraState(camera->state());
camera->start();

现在我正在尝试使用以下命令旋转此凸轮:

std::roate_copy(cameraDevice.constBegin(), cameraDevice.constEnd(), cameraDevice.constEnd, reverse.begin());
camera = new QCamera(reverse);

但是当我尝试启动程序时程序崩溃,没有任何错误。

有人知道问题是什么吗?

1 个答案:

答案 0 :(得分:0)

我认为你对std::rotate_copy的做法有误解。

std::rotate_copy获取一系列数据,并在复制到result迭代器指向的位置时将其移位。

这不会旋转相机。它只是移动和复制范围:http://www.cplusplus.com/reference/algorithm/rotate_copy

修改

以这种方式思考我说:std::string("wroybgivb"); 现在说我做str::rotate_copy我选择“y”作为我的中间,我复制的std::string将包含“ybgivbwro”。

现在想想就像我正在使用3X3图像,每个角色代表一种颜色:

  

wro ybg
  ybg => ivb
  ivb wro

请注意,这是在进行线性阵列旋转(位置偏移)。我永远不能选择一个中间,这样行将成为列,列将成为行。

<强> PS:

好的就是说你知道图像的宽度,并将其分配给变量width。你可以做这样的事情顺时针旋转90°:

for(int x = 0; x < size; ++x){
    output[width - 1 - i / width + (i % width) * width] = input[i];
}

要理解这一点,您需要理解将线性数组编入索引,就像它是2D数组一样 使用它来访问 x坐标: i % width
使用它来访问 y坐标: (i / width) * width

现在您需要获取这些索引并将它们旋转到线性阵列中 使用它来访问 x坐标: width - 1 - i / width
使用它来访问 y坐标: (i % width) * width