diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-01-25 15:18:07 +0300 |
---|---|---|
committer | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-02-27 12:49:40 +0000 |
commit | 37217c57fa5595e7cdfd7e19f34de22848dfc370 (patch) | |
tree | d29b4ed6ff51edfaac44d3f83c9a312b9006c650 /src | |
parent | 32da9ae38969c2e4f01968401339433e7909eed8 (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')
-rw-r--r-- | src/gui/image/qimagereader.cpp | 17 | ||||
-rw-r--r-- | src/gui/image/qimagereader.h | 1 | ||||
-rw-r--r-- | src/gui/image/qimagereaderwriterhelpers.cpp | 36 | ||||
-rw-r--r-- | src/gui/image/qimagereaderwriterhelpers_p.h | 1 | ||||
-rw-r--r-- | src/gui/image/qimagewriter.cpp | 17 | ||||
-rw-r--r-- | src/gui/image/qimagewriter.h | 1 |
6 files changed, 71 insertions, 2 deletions
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index a2686bd238..e77c6f019c 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -1552,4 +1552,21 @@ QList<QByteArray> QImageReader::supportedMimeTypes() return QImageReaderWriterHelpers::supportedMimeTypes(QImageReaderWriterHelpers::CanRead); } +/*! + \since 5.12 + + Returns the list of image formats corresponding to \mimeType. + + Note that the QGuiApplication instance must be created before this function is + called. + + \sa supportedImageFormats(), supportedMimeTypes() +*/ + +QList<QByteArray> QImageReader::imageFormatsForMimeType(const QByteArray &mimeType) +{ + return QImageReaderWriterHelpers::imageFormatsForMimeType(mimeType, + QImageReaderWriterHelpers::CanRead); +} + QT_END_NAMESPACE diff --git a/src/gui/image/qimagereader.h b/src/gui/image/qimagereader.h index 9d6c1e0b1e..4e9a08b6e6 100644 --- a/src/gui/image/qimagereader.h +++ b/src/gui/image/qimagereader.h @@ -144,6 +144,7 @@ public: static QByteArray imageFormat(QIODevice *device); static QList<QByteArray> supportedImageFormats(); static QList<QByteArray> supportedMimeTypes(); + static QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType); private: Q_DISABLE_COPY(QImageReader) 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 diff --git a/src/gui/image/qimagereaderwriterhelpers_p.h b/src/gui/image/qimagereaderwriterhelpers_p.h index 358ae9be89..6fe418a8ab 100644 --- a/src/gui/image/qimagereaderwriterhelpers_p.h +++ b/src/gui/image/qimagereaderwriterhelpers_p.h @@ -130,6 +130,7 @@ enum Capability { }; QList<QByteArray> supportedImageFormats(Capability cap); QList<QByteArray> supportedMimeTypes(Capability cap); +QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType, Capability cap); } diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp index fd036da604..30ec224158 100644 --- a/src/gui/image/qimagewriter.cpp +++ b/src/gui/image/qimagewriter.cpp @@ -863,4 +863,21 @@ QList<QByteArray> QImageWriter::supportedMimeTypes() return QImageReaderWriterHelpers::supportedMimeTypes(QImageReaderWriterHelpers::CanWrite); } +/*! + \since 5.12 + + Returns the list of image formats corresponding to \mimeType. + + Note that the QGuiApplication instance must be created before this function is + called. + + \sa supportedImageFormats(), supportedMimeTypes() +*/ + +QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType) +{ + return QImageReaderWriterHelpers::imageFormatsForMimeType(mimeType, + QImageReaderWriterHelpers::CanWrite); +} + QT_END_NAMESPACE diff --git a/src/gui/image/qimagewriter.h b/src/gui/image/qimagewriter.h index fd1fdd07e8..29c06ccdd2 100644 --- a/src/gui/image/qimagewriter.h +++ b/src/gui/image/qimagewriter.h @@ -116,6 +116,7 @@ public: static QList<QByteArray> supportedImageFormats(); static QList<QByteArray> supportedMimeTypes(); + static QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType); private: Q_DISABLE_COPY(QImageWriter) |