我试图将两个凸轮相邻,旋转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);
但是当我尝试启动程序时程序崩溃,没有任何错误。
有人知道问题是什么吗?
答案 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