Warning, file /graphics/skanlite/src/SkanliteImageSaver.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* ============================================================ 0002 * Date : 2010-07-02 0003 * Description : Image saver class for libksane image data. 0004 * 0005 * SPDX-FileCopyrightText: 2010-2012 Kåre Särs <kare.sars@iki .fi> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0008 * 0009 * ============================================================ */ 0010 0011 #include "SkanliteImageSaver.h" 0012 0013 #include <QMutex> 0014 #include <QUrl> 0015 #include <QImage> 0016 #include <QPdfWriter> 0017 #include <QPainter> 0018 0019 struct SkanliteImageSaver::Private { 0020 bool m_savedOk; 0021 QMutex m_runMutex; 0022 0023 QUrl m_url; 0024 QString m_name; 0025 QImage m_image; 0026 QString m_fileFormat; 0027 int m_quality; 0028 0029 SkanliteImageSaver *q; 0030 0031 bool saveQImage(); 0032 bool savePDF(); 0033 }; 0034 0035 // ------------------------------------------------------------------------ 0036 SkanliteImageSaver::SkanliteImageSaver(QObject *parent) : QThread(parent), d(new Private) 0037 { 0038 d->q = this; 0039 } 0040 0041 // ------------------------------------------------------------------------ 0042 SkanliteImageSaver::~SkanliteImageSaver() 0043 { 0044 delete d; 0045 } 0046 0047 bool SkanliteImageSaver::saveQImage(const QUrl &url, const QString &name, const QImage &image, const QString& fileFormat, int quality) 0048 { 0049 if (!d->m_runMutex.tryLock()) { 0050 return false; 0051 } 0052 0053 d->m_url = url; 0054 d->m_name = name; 0055 d->m_image = image; 0056 d->m_fileFormat = fileFormat; 0057 d->m_quality = quality; 0058 0059 start(); 0060 return true; 0061 } 0062 0063 void SkanliteImageSaver::run() 0064 { 0065 if (d->m_fileFormat == QLatin1String("pdf")) { 0066 d->m_savedOk = d->savePDF(); 0067 } else { 0068 d->m_savedOk = d->saveQImage(); 0069 } 0070 0071 Q_EMIT imageSaved(d->m_url, d->m_name, d->m_savedOk); 0072 0073 d->m_runMutex.unlock(); 0074 } 0075 0076 bool SkanliteImageSaver::Private::saveQImage() 0077 { 0078 return m_image.save(m_name, qPrintable(m_fileFormat), m_quality); 0079 } 0080 0081 bool SkanliteImageSaver::Private::savePDF() 0082 { 0083 const QPageSize pageSize = QPageSize(QSizeF(m_image.width() * 1000.0 / m_image.dotsPerMeterX() , m_image.height() * 1000.0 / m_image.dotsPerMeterY()), QPageSize::Millimeter); 0084 const int dpi = qRound(m_image.dotsPerMeterX() / 1000.0 * 25.4); 0085 0086 QPainter painter; 0087 QPdfWriter writer(m_name); 0088 writer.setPageOrientation(QPageLayout::Portrait); 0089 writer.setResolution(dpi); 0090 writer.setPageSize(pageSize); 0091 writer.setPageMargins(QMarginsF(0, 0, 0, 0)); 0092 writer.setCreator(QStringLiteral("Skanlite")); 0093 writer.setTitle(m_name); 0094 0095 QRect paintArea(0, 0, writer.width(), writer.height()); 0096 if (!painter.begin(&writer)) { 0097 return false; 0098 } 0099 0100 painter.drawImage(paintArea, m_image); 0101 0102 return painter.end(); 0103 } 0104 0105 #include "moc_SkanliteImageSaver.cpp"