Fix QImage::setDotsPerMeterX/Y for images with some orientations
Rotation of images with orientation of 90 and 270 degrees dropped DPM values from rotated image. Task-number: QTBUG-49220 Change-Id: I9c23153c49dd63b5f6958fdde72f466873b0a407 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Liang Qi <liang.qi@theqtcompany.com> Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>bb10
parent
6ed957fd7f
commit
d894cfa863
|
|
@ -4285,6 +4285,8 @@ QImage QImage::smoothScaled(int w, int h) const {
|
|||
|
||||
static QImage rotated90(const QImage &image) {
|
||||
QImage out(image.height(), image.width(), image.format());
|
||||
out.setDotsPerMeterX(image.dotsPerMeterY());
|
||||
out.setDotsPerMeterY(image.dotsPerMeterX());
|
||||
if (image.colorCount() > 0)
|
||||
out.setColorTable(image.colorTable());
|
||||
int w = image.width();
|
||||
|
|
@ -4353,6 +4355,8 @@ static QImage rotated180(const QImage &image) {
|
|||
|
||||
static QImage rotated270(const QImage &image) {
|
||||
QImage out(image.height(), image.width(), image.format());
|
||||
out.setDotsPerMeterX(image.dotsPerMeterY());
|
||||
out.setDotsPerMeterY(image.dotsPerMeterX());
|
||||
if (image.colorCount() > 0)
|
||||
out.setColorTable(image.colorTable());
|
||||
int w = image.width();
|
||||
|
|
|
|||
|
|
@ -2822,15 +2822,17 @@ void tst_QImage::exifOrientation_data()
|
|||
{
|
||||
QTest::addColumn<QString>("fileName");
|
||||
QTest::addColumn<int>("orientation");
|
||||
QTest::newRow("Orientation 1, Intel format") << m_prefix + "jpeg_exif_orientation_value_1.jpg" << (int)QImageIOHandler::TransformationNone;
|
||||
QTest::newRow("Orientation 2, Intel format") << m_prefix + "jpeg_exif_orientation_value_2.jpg" << (int)QImageIOHandler::TransformationMirror;
|
||||
QTest::newRow("Orientation 3, Intel format") << m_prefix + "jpeg_exif_orientation_value_3.jpg" << (int)QImageIOHandler::TransformationRotate180;
|
||||
QTest::newRow("Orientation 4, Intel format") << m_prefix + "jpeg_exif_orientation_value_4.jpg" << (int)QImageIOHandler::TransformationFlip;
|
||||
QTest::newRow("Orientation 5, Intel format") << m_prefix + "jpeg_exif_orientation_value_5.jpg" << (int)QImageIOHandler::TransformationFlipAndRotate90;
|
||||
QTest::newRow("Orientation 6, Intel format") << m_prefix + "jpeg_exif_orientation_value_6.jpg" << (int)QImageIOHandler::TransformationRotate90;
|
||||
QTest::newRow("Orientation 6, Motorola format") << m_prefix + "jpeg_exif_orientation_value_6_motorola.jpg" << (int)QImageIOHandler::TransformationRotate90;
|
||||
QTest::newRow("Orientation 7, Intel format") << m_prefix + "jpeg_exif_orientation_value_7.jpg" << (int)QImageIOHandler::TransformationMirrorAndRotate90;
|
||||
QTest::newRow("Orientation 8, Intel format") << m_prefix + "jpeg_exif_orientation_value_8.jpg" << (int)QImageIOHandler::TransformationRotate270;
|
||||
QTest::addColumn<int>("dpmx");
|
||||
QTest::addColumn<int>("dpmy");
|
||||
QTest::newRow("Orientation 1, Intel format") << m_prefix + "jpeg_exif_orientation_value_1.jpg" << (int)QImageIOHandler::TransformationNone << 39 << 39;
|
||||
QTest::newRow("Orientation 2, Intel format") << m_prefix + "jpeg_exif_orientation_value_2.jpg" << (int)QImageIOHandler::TransformationMirror << 39 << 39;
|
||||
QTest::newRow("Orientation 3, Intel format") << m_prefix + "jpeg_exif_orientation_value_3.jpg" << (int)QImageIOHandler::TransformationRotate180 << 39 << 39;
|
||||
QTest::newRow("Orientation 4, Intel format") << m_prefix + "jpeg_exif_orientation_value_4.jpg" << (int)QImageIOHandler::TransformationFlip << 39 << 39;
|
||||
QTest::newRow("Orientation 5, Intel format") << m_prefix + "jpeg_exif_orientation_value_5.jpg" << (int)QImageIOHandler::TransformationFlipAndRotate90 << 39 << 39;
|
||||
QTest::newRow("Orientation 6, Intel format") << m_prefix + "jpeg_exif_orientation_value_6.jpg" << (int)QImageIOHandler::TransformationRotate90 << 39 << 39;
|
||||
QTest::newRow("Orientation 6, Motorola format") << m_prefix + "jpeg_exif_orientation_value_6_motorola.jpg" << (int)QImageIOHandler::TransformationRotate90 << 39 << 39;
|
||||
QTest::newRow("Orientation 7, Intel format") << m_prefix + "jpeg_exif_orientation_value_7.jpg" << (int)QImageIOHandler::TransformationMirrorAndRotate90 << 39 << 39;
|
||||
QTest::newRow("Orientation 8, Intel format") << m_prefix + "jpeg_exif_orientation_value_8.jpg" << (int)QImageIOHandler::TransformationRotate270 << 39 << 39;
|
||||
}
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
|
@ -2842,14 +2844,17 @@ void tst_QImage::exifOrientation()
|
|||
{
|
||||
QFETCH(QString, fileName);
|
||||
QFETCH(int, orientation);
|
||||
QFETCH(int, dpmx);
|
||||
QFETCH(int, dpmy);
|
||||
|
||||
QImageReader imageReader(fileName);
|
||||
imageReader.setAutoTransform(true);
|
||||
QCOMPARE(imageReader.transformation(), orientation);
|
||||
QImage img = imageReader.read();
|
||||
QCOMPARE(img.dotsPerMeterX(), dpmx);
|
||||
QCOMPARE(img.dotsPerMeterY(), dpmy);
|
||||
QRgb px;
|
||||
QVERIFY(!img.isNull());
|
||||
|
||||
px = img.pixel(0, 0);
|
||||
QVERIFY(qRed(px) > 250 && qGreen(px) < 5 && qBlue(px) < 5);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue