Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <QtQuick>
- Q_DECLARE_LOGGING_CATEGORY(videoPlayerImageProviderCategory)
- class VideoPlayerImageProvider
- : public QQuickImageProvider
- {
- Q_DECLARE_TR_FUNCTIONS(VideoPlayerImageProvider)
- public :
- VideoPlayerImageProvider(QQmlEngine * const engine);
- QImage requestImage(const QString & id, QSize * size, const QSize & requestedSize) Q_DECL_OVERRIDE;
- private :
- QQmlEngine * const engine;
- QHash< QString, QImage > images;
- };
- #include "videoplayerimageprovider.hpp"
- Q_LOGGING_CATEGORY(videoPlayerImageProviderCategory, "videoPlayerImageProvider")
- VideoPlayerImageProvider::VideoPlayerImageProvider(QQmlEngine * const engine)
- : QQuickImageProvider{QQuickImageProvider::Image}
- , engine{engine}
- { ; }
- QImage VideoPlayerImageProvider::requestImage(const QString & id, QSize * size, const QSize & requestedSize)
- {
- const auto selector = QQmlFileSelector::get(engine)->selector();
- const auto imagePath = selector->select(QStringLiteral(":/images/videoplayer/%1").arg(id));
- #if 0
- qDebug().noquote()
- << tr("Selected filepath: %1. Installed file selectors: %2")
- .arg(imagePath, selector->allSelectors().join(QStringLiteral(", ")));
- #endif
- QImage & image = images[imagePath];
- if (image.isNull()) {
- QImageReader imageReader{imagePath};
- if (!imageReader.read(&image)) {
- qCCritical(videoPlayerImageProviderCategory).noquote()
- << tr("Unable to read image from %1: %3 (%2)")
- .arg(imagePath, imageReader.errorString()).arg(imageReader.error());
- }
- }
- if (size) {
- *size = image.size();
- }
- if (requestedSize.isEmpty() || (image.size() == requestedSize)) { // avoid returning invalid QImage
- return image;
- }
- return image.scaled(requestedSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- }
Advertisement
Add Comment
Please, Sign In to add comment