diff options
Diffstat (limited to 'src/gui/image/qimagewriter.cpp')
-rw-r--r-- | src/gui/image/qimagewriter.cpp | 85 |
1 files changed, 72 insertions, 13 deletions
diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp index 3270a5ca01..67b21e372e 100644 --- a/src/gui/image/qimagewriter.cpp +++ b/src/gui/image/qimagewriter.cpp @@ -100,6 +100,7 @@ #include <qfile.h> #include <qfileinfo.h> #include <qimageiohandler.h> +#include <qjsonarray.h> #include <qset.h> #include <qvariant.h> @@ -677,6 +678,26 @@ void supportedImageHandlerFormats(QFactoryLoader *loader, result->insert(key); } } + +void supportedImageHandlerMimeTypes(QFactoryLoader *loader, + QImageIOPlugin::Capability cap, + QSet<QByteArray> *result) +{ + QList<QJsonObject> metaDataList = loader->metaData(); + + const int pluginCount = metaDataList.size(); + for (int i = 0; i < pluginCount; ++i) { + const QJsonObject metaData = metaDataList.at(i).value(QStringLiteral("MetaData")).toObject(); + const QJsonArray keys = metaData.value(QStringLiteral("Keys")).toArray(); + const QJsonArray mimeTypes = metaData.value(QStringLiteral("MimeTypes")).toArray(); + 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) + result->insert(mimeTypes.at(k).toString().toLatin1()); + } + } +} #endif // QT_NO_IMAGEFORMATPLUGIN /*! @@ -685,16 +706,15 @@ void supportedImageHandlerFormats(QFactoryLoader *loader, By default, Qt can write the following formats: \table - \header \li Format \li Description - \row \li BMP \li Windows Bitmap - \row \li JPG \li Joint Photographic Experts Group - \row \li JPEG \li Joint Photographic Experts Group - \row \li PNG \li Portable Network Graphics - \row \li PBM \li Portable Bitmap - \row \li PGM \li Portable Graymap - \row \li PPM \li Portable Pixmap - \row \li XBM \li X11 Bitmap - \row \li XPM \li X11 Pixmap + \header \li Format \li MIME type \li Description + \row \li BMP \li image/bmp \li Windows Bitmap + \row \li JPG \li image/jpeg \li Joint Photographic Experts Group + \row \li PNG \li image/png \li Portable Network Graphics + \row \li PBM \li image/x-portable-bitmap \li Portable Bitmap + \row \li PGM \li image/x-portable-graymap \li Portable Graymap + \row \li PPM \li image/x-portable-pixmap \li Portable Pixmap + \row \li XBM \li image/x-xbitmap \li X11 Bitmap + \row \li XPM \li image/x-xpixmap \li X11 Pixmap \endtable Reading and writing SVG files is supported through Qt's @@ -725,9 +745,6 @@ QList<QByteArray> QImageWriter::supportedImageFormats() #ifndef QT_NO_IMAGEFORMAT_JPEG formats << "jpg" << "jpeg"; #endif -#ifdef QT_BUILTIN_GIF_READER - formats << "gif"; -#endif #ifndef QT_NO_IMAGEFORMATPLUGIN supportedImageHandlerFormats(loader(), QImageIOPlugin::CanWrite, &formats); @@ -741,4 +758,46 @@ QList<QByteArray> QImageWriter::supportedImageFormats() return sortedFormats; } +/*! + Returns the list of MIME types supported by QImageWriter. + + Note that the QApplication instance must be created before this function is + called. + + \sa supportedImageFormats(), QImageReader::supportedMimeTypes() +*/ +QList<QByteArray> QImageWriter::supportedMimeTypes() +{ + QSet<QByteArray> mimeTypes; + mimeTypes << "image/bmp"; +#ifndef QT_NO_IMAGEFORMAT_PPM + mimeTypes << "image/x-portable-bitmap"; + mimeTypes << "image/x-portable-graymap"; + mimeTypes << "image/x-portable-pixmap"; +#endif +#ifndef QT_NO_IMAGEFORMAT_XBM + mimeTypes << "image/x-xbitmap"; +#endif +#ifndef QT_NO_IMAGEFORMAT_XPM + mimeTypes << "image/x-xpixmap"; +#endif +#ifndef QT_NO_IMAGEFORMAT_PNG + mimeTypes << "image/png"; +#endif +#ifndef QT_NO_IMAGEFORMAT_JPEG + mimeTypes << "image/jpeg"; +#endif + +#ifndef QT_NO_LIBRARY + supportedImageHandlerMimeTypes(loader(), QImageIOPlugin::CanWrite, &mimeTypes); +#endif // QT_NO_LIBRARY + + QList<QByteArray> sortedMimeTypes; + for (QSet<QByteArray>::ConstIterator it = mimeTypes.constBegin(); it != mimeTypes.constEnd(); ++it) + sortedMimeTypes << *it; + + qSort(sortedMimeTypes); + return sortedMimeTypes; +} + QT_END_NAMESPACE |