ad

QquickimageProvider仅加载约1%的原始图象-英雄云拓展知识分享

匿名投稿 313 2024-01-22

我开始学习QT,我想用缩略图在文件夹中简单列出图象列表。我想法使它起作用,但是它仿佛只能在500中随机加载约1张图象,而50中的1张图象是黑色的(下面的屏幕截图)。转动后,缩略图可能不会再加载,其他一些可能会加载。对原始图象,我使用libraw。

少量有视察:

7.7.2017-我试图检查是不是没有破坏文件引发问题。虽然Libraw说缩略图是JPG,但它们仿佛并不是如此,由于普通阅读器没法阅读成功,也没法阅读失败,但是更好的编辑者可以打开同时打开。因此,这种情况下,仿佛没有破坏数据的问题

当我为几张照片加载时,当照片较少时,它们几近总是正确地加载。随着量增加,他们突然可能会变黑或根本不加载。或许是多线程问题?

Libraw仿佛总是正确加载文件。我经过加载时在文件中间打印足够的字节来对其进行测试

当图象是黑色时,它认为一切都很好,当图象根本没有加载时,这是由于Qimage的内容为无效。

QquickimageProvider仅加载约1%的原始图象-英雄云拓展知识分享

当我屡次添加一张图象时,所有副本都同享相同的命运(它们都加载或失败)

QImage RawImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) {

LibRaw rawProc;

auto state = rawProc.open_file(id.toLatin1().data());

QImage thumbnail;

if(LIBRAW_SUCCESS == state) {

if(LIBRAW_SUCCESS == rawProc.unpack_thumb()) {

if (LIBRAW_THUMBNAIL_JPEG == rawProc.imgdata.thumbnail.tformat) {

thumbnail.loadFromData((unsigned char*)rawProc.imgdata.thumbnail.thumb, rawProc.imgdata.thumbnail.tlength, "JPEG");

}

}

rawProc.recycle();

}

return thumbnail;

}

用于显示图象,我使用GridView和Model-Delegate

GridView {

id: gridView

anchors.rightMargin: 6

anchors.leftMargin: 6

anchors.bottomMargin: 6

anchors.topMargin: 46

anchors.fill: parent

cellHeight: 200

cellWidth: 185

model: imageModel

delegate: PhotoDelegate {}

}

原始图象提供商和模型在主要功能中像这样注册

int main(int argc, char *argv[])

{

...

QQmlApplicationEngine engine;

engine.addImageProvider(QLatin1String("rawProvider"), new RawImageProvider);

AppData::setContext(engine.rootContext());

AppData::notifyContext();

...

}

AppData是我的“静态”类,它包括创建模型的列表,并指向上下文指针,因此我可以轻松地从QML(文件阅读器)调用的其他类中访问和更新这些值。每次更改数据时都会遵守模型的更新。

void AppData::notifyContext() {

context->setContextProperty("imageModel", QVariant::fromValue(dataList));

}

我真的已用完了我如何解决这个问题的想法,任何帮助都会有...好吧...有帮助

看答案

问题很简单。 Libraw的JPG缩略图实际上是原始图象,由于JPG(我不知道这一点,不好),而Qtquick没法处理提供的图象大小。这就是为何它可以经过更少的图象进行工作,但失败了更多。该解决方案比返回调剂大小的缩略图要小很多,理想情况下是QML中图象的大小。

 return thumbnail.scaled(320, 320).scaled(160, 160, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:QT qtquick2
上一篇:指定的铸件在ListView项目C#上无效-英雄云拓展知识分享
下一篇:非常简单的Xamarin.Forms利用程序不会存档-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×