18QImage QuickSharedImageLoader::loadFile(
const QString &path, ImageParameters *params)
20 QImageReader imgio(path);
21 QSize realSize = imgio.size();
23 QQuickImageProviderOptions options;
25 requestSize = params->value(RequestedSize).toSize();
26 options = params->value(ProviderOptions).value<QQuickImageProviderOptions>();
29 QSize scSize = QQuickImageProviderWithOptions::loadSize(imgio.size(), requestSize, imgio.format(), options);
32 imgio.setScaledSize(scSize);
35 if (imgio.read(&image)) {
36 if (realSize.isEmpty())
37 realSize = image.size();
40 if (image.format() != QImage::Format_RGB32 && image.format() != QImage::Format_ARGB32_Premultiplied) {
41 QImage::Format newFmt = QImage::Format_RGB32;
42 if (image.hasAlphaChannel() && image.data_ptr()->checkForAlphaPixels())
43 newFmt = QImage::Format_ARGB32_Premultiplied;
44 qCDebug(lcSharedImage) <<
"Convert on load from format" << image.format() <<
"to" << newFmt;
45 image = image.convertToFormat(newFmt);
49 if (params && params->size() > OriginalSize)
50 params->replace(OriginalSize, realSize);
55QString QuickSharedImageLoader::key(
const QString &path, ImageParameters *params)
58 QQuickImageProviderOptions opts;
60 reqSz = params->value(RequestedSize).toSize();
61 opts = params->value(ProviderOptions).value<QQuickImageProviderOptions>();
65 int aspect = opts.preserveAspectRatioCrop() || opts.preserveAspectRatioFit() ? 1 : 0;
67 QString key = path + QStringLiteral(
"_%1x%2_%3").arg(reqSz.width()).arg(reqSz.height()).arg(aspect);
68 qCDebug(lcSharedImage) <<
"KEY:" << key;
77QImage SharedImageProvider::requestImage(
const QString &id, QSize *size,
const QSize &requestedSize,
const QQuickImageProviderOptions &options)
79 QFileInfo fi(QDir::root(), id);
80 QString path = fi.canonicalFilePath();
84 QSharedImageLoader::ImageParameters params(QuickSharedImageLoader::NumImageParameters);
85 params[QuickSharedImageLoader::RequestedSize].setValue(requestedSize);
86 params[QuickSharedImageLoader::ProviderOptions].setValue(options);
88 QImage img = loader->load(path, ¶ms);
91 img = loader->loadFile(path, ¶ms);
93 qCWarning(lcSharedImage) <<
"Sharing problem; loading" << id <<
"unshared";