OSDN Git Service

generic: simplify image rotation
authorIvailo Monev <xakepa10@gmail.com>
Fri, 19 Mar 2021 03:01:56 +0000 (05:01 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Fri, 19 Mar 2021 03:01:56 +0000 (05:01 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
kdeplasma-addons/applets/frame/imageloader.cpp
thumbnailers/raw/rawcreator.cpp

index 10c2c42..c0febdb 100644 (file)
@@ -40,49 +40,14 @@ ImageLoader::ImageLoader(const QString &path)
 #endif
 }
 
-QImage ImageLoader::correctRotation(const QImage& tempImage, const QString &path)
+QImage ImageLoader::correctRotation(const QImage& image, const QString &path)
 {
-    QImage image = QImage();
-    if (!tempImage.isNull()) {
-#ifdef HAVE_KEXIV2 
-        KExiv2Iface::KExiv2 exif(path);
-        QMatrix m;
-        switch (exif.getImageOrientation()) {
-        case KExiv2Iface::KExiv2::ORIENTATION_HFLIP:
-            m.scale(-1.0,1.0);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_ROT_180:
-            m.rotate(180);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_VFLIP:
-            m.scale(1.0,-1.0);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_ROT_90:
-            m.rotate(90);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_HFLIP:
-            m.rotate(90);
-            m.scale(-1.0,1.0);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_VFLIP:
-            m.rotate(90);
-            m.scale(1.0,-1.0);
-            image = tempImage.transformed(m);
-            break;
-        case KExiv2Iface::KExiv2::ORIENTATION_ROT_270:
-            m.rotate(270);
-            image = tempImage.transformed(m);
-            break;
-        default:
-            image = tempImage;
-        }
-#else
-        image = tempImage;
+#ifdef HAVE_KEXIV2
+    if (!image.isNull()) {
+        QImage tempImage(image);
+        KExiv2Iface::KExiv2 exiv(path);
+        exiv.rotateExifQImage(tempImage, exiv.getImageOrientation());
+        return tempImage;
 #endif
     }
     return image;
index 0e41818..dc552b0 100644 (file)
@@ -61,40 +61,7 @@ bool RAWCreator::create(const QString &path, int width, int height, QImage &img)
         {
             //We managed reading the EXIF info, rotate the image
             //according to the EXIF orientation flag
-            KExiv2Iface::KExiv2::ImageOrientation orient=exiv.getImageOrientation();
-
-            //Rotate according to the EXIF orientation flag
-            switch(orient)
-            {
-                case KExiv2Iface::KExiv2::ORIENTATION_UNSPECIFIED:
-                case KExiv2Iface::KExiv2::ORIENTATION_NORMAL:
-                    break; //we do nothing
-                case KExiv2Iface::KExiv2::ORIENTATION_HFLIP:
-                    preview = preview.mirrored(true,false);
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_ROT_180:
-                    preview = preview.transformed(QMatrix().rotate(180));
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_VFLIP:
-                    preview = preview.mirrored(false,true);
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_HFLIP:
-                    preview = preview.mirrored(true,false);
-                    preview = preview.transformed(QMatrix().rotate(90));
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_ROT_90:
-                    preview = preview.transformed(QMatrix().rotate(90));
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_VFLIP:
-                    preview = preview.mirrored(false,true);
-                    preview = preview.transformed(QMatrix().rotate(90));
-                    break;
-                case KExiv2Iface::KExiv2::ORIENTATION_ROT_270:
-                    preview = preview.transformed(QMatrix().rotate(270));
-                    break;
-                default:
-                    break;
-            }
+            exiv.rotateExifQImage(preview, exiv.getImageOrientation());
         }
 
         //Scale the image as requested by the thumbnailer