gpt4 book ai didi

c++ - 如何从路径加载 QImage?

转载 作者:行者123 更新时间:2023-11-27 23:36:03 25 4
gpt4 key购买 nike

我在我的 qt quick 应用程序中用相机捕获了一个图像。我想将路径发送到我的 c++ 代码并在 c++ QImage 中加载该图像。但是路径是 image://camera/preview_1 我不知道如何使用该路径?

Camera {
id: camera

imageCapture {
onImageCaptured: {
console.log("Preview = "+preview);
photoPreview.source = preview
console.log("CapturedImagePath => "+camera.imageCapture.capturedImagePath);
up.loadImage(preview);
}
}

C++ 类

void UserProfile::loadImage(QString path)
{
QUrl imageUrl(path);
qWarning()<<"imageUrl.host()=>"<<imageUrl.host();
qWarning()<<"imageUrl.path()=>"<<imageUrl.path();
qWarning()<<"imageUrl.toLocalFile()=>"<<imageUrl.toLocalFile();
bool isOpend= m_image.load(path); //m_image is an QImage object
qWarning()<<"Image loaded=> "<<isOpend;
}

应用输出

D MyApp: qml: Preview = image://camera/preview_1
D MyApp: qml: CapturedImagePath =>
W MyApp: imageUrl.host()=> "camera"
W MyApp: imageUrl.path()=> "/preview_1"
W MyApp: imageUrl.toLocalFile()=> ""
W MyApp: Image loaded=> false

最佳答案

URL image://camera/preview_1 表示图像数据位于 QQuickImageProvider 中。实例。可能是 QQuickImageProvider Camera 创建的实例。

由于 UserProfile 实例与 camera 存在于同一个 QQmlEngine 中,您可以

void UserProfile::loadImage(const QString &path)
{
auto myQmlEngine = qmlEngine(this);
if(myQmlEngine==nullptr)
return;

QUrl imageUrl(path);
auto provider = reinterpret_cast<QQuickImageProvider*>( myQmlEngine->imageProvider(imageUrl.host()));

if (provider->imageType()==QQuickImageProvider::Image){
QImage img = provider->requestImage(imageUrl.path().remove(0,1),nullptr,QSize());
// do whatever you want with the image
}
}

小心 reinterpret_cast。您还必须确保 QQuickImageProvider::imageType()正在返回 QQmlImageProviderBase::Image .

您还可以使用 capturedImagePath 代替 preview URL 来防止这种复杂性(如果可能的话)您的用例的一个选项。

关于c++ - 如何从路径加载 QImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59134308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com