summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qimagereaderwriterhelpers.cpp
diff options
context:
space:
mode:
authorAlexander Volkov <a.volkov@rusbitech.ru>2018-01-25 15:18:07 +0300
committerAlexander Volkov <a.volkov@rusbitech.ru>2018-02-27 12:49:40 +0000
commit37217c57fa5595e7cdfd7e19f34de22848dfc370 (patch)
treed29b4ed6ff51edfaac44d3f83c9a312b9006c650 /src/gui/image/qimagereaderwriterhelpers.cpp
parent32da9ae38969c2e4f01968401339433e7909eed8 (diff)
Introduce QImage{Reader,Writer}::imageFormatsForMimeType()
It can be used if, for example, you get an image MIME type from the user, and you want to find the appropriate format for loading or saving this image. Task-number: QTBUG-49714 Change-Id: Iae5a7e9d658d6c3d1cd750a8bbc279f1812f99df Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/gui/image/qimagereaderwriterhelpers.cpp')
-rw-r--r--src/gui/image/qimagereaderwriterhelpers.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/gui/image/qimagereaderwriterhelpers.cpp b/src/gui/image/qimagereaderwriterhelpers.cpp
index 6481f0e603..a5b7fb6449 100644
--- a/src/gui/image/qimagereaderwriterhelpers.cpp
+++ b/src/gui/image/qimagereaderwriterhelpers.cpp
@@ -78,7 +78,8 @@ static void appendImagePluginFormats(QFactoryLoader *loader,
static void appendImagePluginMimeTypes(QFactoryLoader *loader,
QImageIOPlugin::Capability cap,
- QList<QByteArray> *result)
+ QList<QByteArray> *result,
+ QList<QByteArray> *resultKeys = nullptr)
{
QList<QJsonObject> metaDataList = loader->metaData();
@@ -90,8 +91,12 @@ static void appendImagePluginMimeTypes(QFactoryLoader *loader,
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(loader->instance(i));
const int keyCount = keys.size();
for (int k = 0; k < keyCount; ++k) {
- if (plugin && (plugin->capabilities(0, keys.at(k).toString().toLatin1()) & cap) != 0)
+ const QByteArray key = keys.at(k).toString().toLatin1();
+ if (plugin && (plugin->capabilities(0, key) & cap) != 0) {
result->append(mimeTypes.at(k).toString().toLatin1());
+ if (resultKeys)
+ resultKeys->append(key);
+ }
}
}
}
@@ -143,6 +148,33 @@ QList<QByteArray> supportedMimeTypes(Capability cap)
return mimeTypes;
}
+QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType, Capability cap)
+{
+ QList<QByteArray> formats;
+ if (mimeType.startsWith("image/")) {
+ const QByteArray type = mimeType.mid(sizeof("image/") - 1);
+ for (const auto &fmt : _qt_BuiltInFormats) {
+ if (fmt.mimeType == type && !formats.contains(fmt.extension))
+ formats << fmt.extension;
+ }
+ }
+
+#ifndef QT_NO_IMAGEFORMATPLUGIN
+ QList<QByteArray> mimeTypes;
+ QList<QByteArray> keys;
+ appendImagePluginMimeTypes(loader(), pluginCapability(cap), &mimeTypes, &keys);
+ for (int i = 0; i < mimeTypes.size(); ++i) {
+ if (mimeTypes.at(i) == mimeType) {
+ const auto &key = keys.at(i);
+ if (!formats.contains(key))
+ formats << key;
+ }
+ }
+#endif // QT_NO_IMAGEFORMATPLUGIN
+
+ return formats;
+}
+
} // QImageReaderWriterHelpers
QT_END_NAMESPACE