Einige gängige Bildformate (wie jpg) können Metadaten enthalten. Eine davon ist die Rotation. Wenn Sie die Datei in einem Grafikeditor erstellen, sie dann im Viewer drehen und schließlich mit den Klassen QImage, QPicture oder QPixmap in Ihre Anwendung laden, werden Sie feststellen, dass das Bild in seiner ursprünglichen Ausrichtung geladen wird. Mit dieser Ausrichtung wird das Bild in der Datei gespeichert. Gleichzeitig öffnet ein beliebiger Grafikeditor dieses Bild mit der aktuellen Drehung. Das Problem lässt sich leicht durch Drehen in den gewünschten Winkel beheben. Aber die oben genannten Klassen lassen es nicht zu, dass es gezählt wird.
Um dieses Problem zu lösen, wenden sich Programmierer dem Multimediamodul zu (insbesondere der Klasse QMediaRecorder und ihrer Methode metaData(const Qstring & key). Dies ist ein Fehler. QImageReader und die Methode transformation() helfen uns bei der Lösung dieses Problems .
QImageReader reader("filePath"); int rotor(0); switch( reader.transformation() ) { case QImageIOHandler::TransformationRotate90: rotor = 90; break; case QImageIOHandler::TransformationRotate180: rotor = 180; break; case QImageIOHandler::TransformationRotate270: rotor = 270; break; } QImage image = reader.read(); if( rotor ) { QTransform tr; tr.rotate(rotor); image = image.transformed(tr); } QLabel l; l.resize( image.size() ); l.setPixmap( QPixmap::fromImage(image) ); l.show();
Ein ausführliches Studium der Qt-Dokumentation half mir, diese Lösung zu finden. Sie können eine Datei mithilfe von Metadaten mithilfe der QImageWriter-Klasse speichern.