void SaveImgThread::run() { // Perform saving --------------------------------------------------------------- QImage prev = d->img.scaled(1280, 1024, Qt::KeepAspectRatio, Qt::SmoothTransformation); QImage thumb = d->img.scaled(160, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation); QByteArray prof = KPWriteImage::getICCProfilFromFile(RawDecodingSettings::SRGB); KExiv2 meta; meta.setImageProgramId(QString("Kipi-plugins"), QString(kipiplugins_version)); meta.setImageDimensions(d->img.size()); if (d->format != QString("JPEG")) meta.setImagePreview(prev); meta.setExifThumbnail(thumb); meta.setExifTagString("Exif.Image.DocumentName", QString("Scanned Image")); // not i18n meta.setExifTagString("Exif.Image.Make", d->make); meta.setXmpTagString("Xmp.tiff.Make", d->make); meta.setExifTagString("Exif.Image.Model", d->model); meta.setXmpTagString("Xmp.tiff.Model", d->model); meta.setImageDateTime(QDateTime::currentDateTime()); meta.setImageOrientation(KExiv2::ORIENTATION_NORMAL); meta.setImageColorWorkSpace(KExiv2::WORKSPACE_SRGB); KPWriteImage wImageIface; if (d->frmt != KSaneIface::KSaneWidget::FormatRGB_16_C) { QByteArray data((const char*)d->img.bits(), d->img.numBytes()); wImageIface.setImageData(data, d->img.width(), d->img.height(), false, true, prof, meta); } else { // 16 bits color depth image. wImageIface.setImageData(d->ksaneData, d->width, d->height, true, false, prof, meta); } bool ret = false; QString path; if(d->newUrl.isLocalFile()) path = d->newUrl.toLocalFile(); else path = d->newUrl.path(); if (d->format == QString("JPEG")) { ret = wImageIface.write2JPEG(path); } else if (d->format == QString("PNG")) { ret = wImageIface.write2PNG(path); } else if (d->format == QString("TIFF")) { ret = wImageIface.write2TIFF(path); } else { ret = d->img.save(path, d->format.toAscii().data()); } emit signalComplete(d->newUrl, ret); }