diff --git a/imageformats/sai.cpp b/imageformats/sai.cpp index f4ba082..caf05d7 100644 --- a/imageformats/sai.cpp +++ b/imageformats/sai.cpp @@ -2,6 +2,10 @@ #include "sai.hpp" +#include +#include +#include + SAIHandler::SAIHandler() { @@ -18,8 +22,31 @@ bool SAIHandler::canRead() const bool SAIHandler::read(QImage *image) { - Q_UNUSED(image) - return false; + QFile * file = qobject_cast(device()); + if (!file) { + return false; + } + + sai::Document saiDoc(file->fileName().toUtf8().data()); + if (!saiDoc.IsOpen()) { + qDebug() << "isOpen false"; + return false; + } + + std::uint32_t width, height; + std::unique_ptr PixelData; + std::tie(PixelData, width, height) = saiDoc.GetThumbnail(); +// std::uint32_t aw, ah; +// std::tie(aw, ah) = saiDoc.GetCanvasSize(); +// qDebug() << width << height << aw << ah; + if( PixelData == nullptr || !width || !height ) { + return false; + } + + const unsigned char * bytes = PixelData.get(); + QImage img(bytes, static_cast(width), static_cast(height), QImage::Format_RGB32); + *image = img; + return true; } bool SAIHandler::write(const QImage &image)