qml相机保存不同分辨率的相同图像
qml Camera save same image with different resolutions
我正在使用 QML 的 Camera
组件和 Camera.imageCapture
来保存图像。
我想在用户单击 "Capture" 按钮时保存同一图像的多个分辨率。
我正在尝试 运行 的代码就像这样:
// 160x120
camera.imageCapture.resolution = Qt.size(160,120)
camera.imageCapture.captureToLocation("/location/")
// 320x340
camera.imageCapture.resolution = Qt.size(320,240)
camera.imageCapture.captureToLocation("/anotherLocation/")
camera.imageCapture.resolution = Qt.size(-1,-1) // set to default again
谢谢。
如果您将相机输入保存到 QImage,您可以保存并调整大小,然后使用 QImage 的 image.save() 和 image.scaled() 函数再次保存。
我以前使用过这些功能来调整图像大小并且效果很好。
但是我不知道如何将相机输入保存到 QImage,但我会调查并报告。
我知道这不是您问题的完整答案,但这是一个开始。希望对您有所帮助。
我是这样解决的:
- 在相机中以可用的最高分辨率保存图像:
Component.onCompleted: {
camera.imageCapture.resolution = camera.imageCapture.supportedResolutions[camera.imageCapture.supportedResolutions.length-1]
}
- 将该文件的路径提供给 QImage 的构造函数。
- 然后缩放并保存:
完整代码:
imageresizer.cpp:
#include "imageresizer.h"
#include <QImage>
ImageResizer::ImageResizer(QObject *parent) : QObject(parent)
{}
void ImageResizer::resizeImage(int width, int height, QString file, QString savefile)
{
QImage img(file);
img = img.scaled(width, height);
img.save(savefile);
}
imageresizer.h:
#ifndef IMAGERESIZER_H
#define IMAGERESIZER_H
#include <QObject>
class ImageResizer : public QObject
{
Q_OBJECT
public:
explicit ImageResizer(QObject *parent = nullptr);
signals:
public slots:
void resizeImage(int width, int height, QString file, QString savefile);
};
#endif // IMAGERESIZER_H
不要忘记将其从 QML 提供:
int main(int argc, char *argv[])
{
qmlRegisterType<ImageResizer>("project.imageresizer", 1, 0, "ImageResizer"); // Here
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml:
import project.imageresizer 1.0
Window {
id: mainWindow
visible: true
width: 1024
height: 600
title: ""
ImageResizer {
id: imageResizer
}
// Use it like:
// imageResizer.resizeImage(100,100,imgPath,scaleImgPath)
}
我正在使用 QML 的 Camera
组件和 Camera.imageCapture
来保存图像。
我想在用户单击 "Capture" 按钮时保存同一图像的多个分辨率。
我正在尝试 运行 的代码就像这样:
// 160x120
camera.imageCapture.resolution = Qt.size(160,120)
camera.imageCapture.captureToLocation("/location/")
// 320x340
camera.imageCapture.resolution = Qt.size(320,240)
camera.imageCapture.captureToLocation("/anotherLocation/")
camera.imageCapture.resolution = Qt.size(-1,-1) // set to default again
谢谢。
如果您将相机输入保存到 QImage,您可以保存并调整大小,然后使用 QImage 的 image.save() 和 image.scaled() 函数再次保存。 我以前使用过这些功能来调整图像大小并且效果很好。 但是我不知道如何将相机输入保存到 QImage,但我会调查并报告。
我知道这不是您问题的完整答案,但这是一个开始。希望对您有所帮助。
我是这样解决的:
- 在相机中以可用的最高分辨率保存图像:
Component.onCompleted: {
camera.imageCapture.resolution = camera.imageCapture.supportedResolutions[camera.imageCapture.supportedResolutions.length-1]
}
- 将该文件的路径提供给 QImage 的构造函数。
- 然后缩放并保存:
完整代码:
imageresizer.cpp:
#include "imageresizer.h"
#include <QImage>
ImageResizer::ImageResizer(QObject *parent) : QObject(parent)
{}
void ImageResizer::resizeImage(int width, int height, QString file, QString savefile)
{
QImage img(file);
img = img.scaled(width, height);
img.save(savefile);
}
imageresizer.h:
#ifndef IMAGERESIZER_H
#define IMAGERESIZER_H
#include <QObject>
class ImageResizer : public QObject
{
Q_OBJECT
public:
explicit ImageResizer(QObject *parent = nullptr);
signals:
public slots:
void resizeImage(int width, int height, QString file, QString savefile);
};
#endif // IMAGERESIZER_H
不要忘记将其从 QML 提供:
int main(int argc, char *argv[])
{
qmlRegisterType<ImageResizer>("project.imageresizer", 1, 0, "ImageResizer"); // Here
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml:
import project.imageresizer 1.0
Window {
id: mainWindow
visible: true
width: 1024
height: 600
title: ""
ImageResizer {
id: imageResizer
}
// Use it like:
// imageResizer.resizeImage(100,100,imgPath,scaleImgPath)
}