From 518f886b6128331ce47932edd637471d58d0d877 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Fri, 17 Apr 2015 10:43:19 +0200 Subject: [PATCH] Revert "Rotate images according to Exif orientation" Due to a behavior change. This reverts commit 9157087334186ff3ef811f2ec234a3bf5d4a4889. This reverts commit 16c32c6dfbca03a46d1a2bb87b6c1c365e6179d5. Task-number: QTBUG-37946 Task-number: QTBUG-45552 Task-number: QTBUG-43563 Change-Id: Idf8df7d8f22465e8f6b51acb68993ac97208b184 Reviewed-by: Konstantin Ritt Reviewed-by: Gunnar Sletta --- src/gui/image/qjpeghandler.cpp | 150 +----------------- .../images/jpeg_exif_orientation_value_1.jpg | Bin 910 -> 0 bytes .../images/jpeg_exif_orientation_value_2.jpg | Bin 910 -> 0 bytes .../images/jpeg_exif_orientation_value_3.jpg | Bin 988 -> 0 bytes .../images/jpeg_exif_orientation_value_4.jpg | Bin 995 -> 0 bytes .../images/jpeg_exif_orientation_value_5.jpg | Bin 912 -> 0 bytes .../images/jpeg_exif_orientation_value_6.jpg | Bin 911 -> 0 bytes ...jpeg_exif_orientation_value_6_motorola.jpg | Bin 911 -> 0 bytes .../images/jpeg_exif_orientation_value_7.jpg | Bin 987 -> 0 bytes .../images/jpeg_exif_orientation_value_8.jpg | Bin 991 -> 0 bytes tests/auto/gui/image/qimage/tst_qimage.cpp | 33 ---- 11 files changed, 1 insertion(+), 182 deletions(-) delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_1.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_2.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_3.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_4.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_5.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_6.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_6_motorola.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_7.jpg delete mode 100644 tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_8.jpg diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp index 9cf9947b6c2..14c8b4c0f46 100644 --- a/src/gui/image/qjpeghandler.cpp +++ b/src/gui/image/qjpeghandler.cpp @@ -726,7 +726,7 @@ public: }; QJpegHandlerPrivate(QJpegHandler *qq) - : quality(75), exifOrientation(1), iod_src(0), state(Ready), q(qq) + : quality(75), iod_src(0), state(Ready), q(qq) {} ~QJpegHandlerPrivate() @@ -741,10 +741,8 @@ public: bool readJpegHeader(QIODevice*); bool read(QImage *image); - void applyExifOrientation(QImage *image); int quality; - int exifOrientation; QVariant size; QImage::Format format; QSize scaledSize; @@ -762,97 +760,6 @@ public: QJpegHandler *q; }; -static bool readExifHeader(QDataStream &stream) -{ - char prefix[6]; - if (stream.readRawData(prefix, sizeof(prefix)) != sizeof(prefix)) - return false; - if (prefix[0] != 'E' || prefix[1] != 'x' || prefix[2] != 'i' || prefix[3] != 'f' || prefix[4] != 0 || prefix[5] != 0) - return false; - return true; -} - -/* - * Returns -1 on error - * Returns 0 if no Exif orientation was found - * Returns 1 orientation is horizontal (normal) - * Returns 2 mirror horizontal - * Returns 3 rotate 180 - * Returns 4 mirror vertical - * Returns 5 mirror horizontal and rotate 270 CCW - * Returns 6 rotate 90 CW - * Returns 7 mirror horizontal and rotate 90 CW - * Returns 8 rotate 270 CW - */ -static int getExifOrientation(QByteArray &exifData) -{ - QDataStream stream(&exifData, QIODevice::ReadOnly); - - if (!readExifHeader(stream)) - return -1; - - quint16 val; - quint32 offset; - - // read byte order marker - stream >> val; - if (val == 0x4949) // 'II' == Intel - stream.setByteOrder(QDataStream::LittleEndian); - else if (val == 0x4d4d) // 'MM' == Motorola - stream.setByteOrder(QDataStream::BigEndian); - else - return -1; // unknown byte order - - // read size - stream >> val; - if (val != 0x2a) - return -1; - - stream >> offset; - // we have already used 8 bytes of TIFF header - offset -= 8; - - // read IFD - while (!stream.atEnd()) { - quint16 numEntries; - - // skip offset bytes to get the next IFD - if (stream.skipRawData(offset) != (qint32)offset) - return -1; - - stream >> numEntries; - - for (;numEntries > 0; --numEntries) { - quint16 tag; - quint16 type; - quint32 components; - quint16 value; - quint16 dummy; - - stream >> tag >> type >> components >> value >> dummy; - if (tag == 0x0112) { // Tag Exif.Image.Orientation - if (components !=1) - return -1; - if (type != 3) // we are expecting it to be an unsigned short - return -1; - if (value < 1 || value > 8) // check for valid range - return -1; - - // It is possible to include the orientation multiple times. - // Right now the first value is returned. - return value; - } - } - - // read offset to next IFD - stream >> offset; - if (offset == 0) // this is the last IFD - break; - } - - // No Exif orientation was found - return 0; -} /*! \internal */ @@ -872,7 +779,6 @@ bool QJpegHandlerPrivate::readJpegHeader(QIODevice *device) if (!setjmp(err.setjmp_buffer)) { jpeg_save_markers(&info, JPEG_COM, 0xFFFF); - jpeg_save_markers(&info, JPEG_APP0+1, 0xFFFF); // Exif uses APP1 marker (void) jpeg_read_header(&info, TRUE); @@ -884,8 +790,6 @@ bool QJpegHandlerPrivate::readJpegHeader(QIODevice *device) format = QImage::Format_Invalid; read_jpeg_format(format, &info); - QByteArray exifData; - for (jpeg_saved_marker_ptr marker = info.marker_list; marker != NULL; marker = marker->next) { if (marker->marker == JPEG_COM) { QString key, value; @@ -903,18 +807,9 @@ bool QJpegHandlerPrivate::readJpegHeader(QIODevice *device) description += key + QLatin1String(": ") + value.simplified(); readTexts.append(key); readTexts.append(value); - } else if (marker->marker == JPEG_APP0+1) { - exifData.append((const char*)marker->data, marker->data_length); } } - if (exifData.size()) { - // Exif data present - int orientation = getExifOrientation(exifData); - if (orientation > 0) - exifOrientation = orientation; - } - state = ReadHeader; return true; } @@ -928,48 +823,6 @@ bool QJpegHandlerPrivate::readJpegHeader(QIODevice *device) return true; } -void QJpegHandlerPrivate::applyExifOrientation(QImage *image) -{ - // This is not an optimized implementation, but easiest to maintain - QTransform transform; - - switch (exifOrientation) { - case 1: // normal - break; - case 2: // mirror horizontal - *image = image->mirrored(true, false); - break; - case 3: // rotate 180 - transform.rotate(180); - *image = image->transformed(transform); - break; - case 4: // mirror vertical - *image = image->mirrored(false, true); - break; - case 5: // mirror horizontal and rotate 270 CCW - *image = image->mirrored(true, false); - transform.rotate(270); - *image = image->transformed(transform); - break; - case 6: // rotate 90 CW - transform.rotate(90); - *image = image->transformed(transform); - break; - case 7: // mirror horizontal and rotate 90 CW - *image = image->mirrored(true, false); - transform.rotate(90); - *image = image->transformed(transform); - break; - case 8: // rotate 270 CW - transform.rotate(-90); - *image = image->transformed(transform); - break; - default: - qWarning("This should never happen"); - } - exifOrientation = 1; -} - bool QJpegHandlerPrivate::read(QImage *image) { if(state == Ready) @@ -981,7 +834,6 @@ bool QJpegHandlerPrivate::read(QImage *image) if (success) { for (int i = 0; i < readTexts.size()-1; i+=2) image->setText(readTexts.at(i), readTexts.at(i+1)); - applyExifOrientation(image); state = Ready; return true; diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_1.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_1.jpg deleted file mode 100644 index aaa4ac4e10f40e6a32560aef43b553e804f0a973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmex=@c%Z0 zGe`$T0AvV727omGKg1x&!NA49#mp$kz$D1XEXer(2!j~dJ0O?B06POGP+XFcfr%O9 z5d>gkVrF6ee~Wz(=SUhmhk>$zLYFZ;^Qy*Xp@!!9$`S)MazOgeKTC9?CS%G6(;wklud z*8?q*2U*0x$bzs5=n+PC239sf0U<@OWlSK;7+4uJ9kip4IA${*U~Ndh;=oeN(b1R2 z@hmMZea)X&em+k+RA)(4vY%7x(!8uvc=GAoUzsV>O1si$WnQk(s=Tm(RaJ{IYMK&* zlJd;YAP)k=0~~Ac5CH`s8>4^_G(_0!nZoV6S4G?jw>(++tL*7>F_y&N`@^?SQH?Px zl-_b%H1pZ#&oLcUcHVbpv`%p-4Y|*15}D6^JUlf&*Yvu-ao4ZRrO$k8MQk?;$9y;G z?9JxrZF5PBo4)V&ccArRpy)sajPSUyR}{TIo!P$icWIex`Wm+NuekhyjsnLlSeHNv zKhOwKL0|--0H_I|$Pw^faBSzpY#Eny2S?MYosLecR)a!Y45$ZH6C(q}T2LSh*vWgX zm{6$Bz$E=-){a-n<}c5K>=8iI!oa8i4I`kI;#YER*`^&=LApid+04N35 AMF0Q* diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_2.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_2.jpg deleted file mode 100644 index a61d2723d7cf43ee9244f4dcb6b26d848574a480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmex=>Y?(AtXBkCs161k%1ZL zPh`N##>Ddf76T76BLkBFvjEVym*4elSJ@emF31klAua&21z7_dGm8LF0|zL)SedF# zo@*8=m&VTrs#O#On$Ez$$_iJ`$i%|Tz{SEB3f?O;B>8U}nWRec5HX`RX%{8Fcm}D@-|a=DWw4GgFtixb9vO zy&D9+-v?PK0JH-oNSIleSlJi_grR}LX3uoocJk)8ewn#!;^x^-oatBB@TSf?)zrl7 zwq{3lG+Wgvv1RM$h+KPmeR-_QEeGED?}TP9+ho}mnX<&1N3Lzfam%xI6P6iztmz1v zGHJ>Q&(oXd{J!bE_kAtUb}>+NAbbmCF*3ko!(NeDxnkYrBt{Ww$9lsm#Z{+bfNlcE zEI5b+82Eukhzp{}C@|$f%mBrW0B0$Sj0ocb1qP?Yea_K6W=6T^>Veusf!a_kW?+P9 z0tK>w+XE(xbM9d$y!aVjFdmu1nGe(->>Kn<)5C;n#;;;xvy%_1)O>qVvO I_5W`I093Zmxc~qF diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_3.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_3.jpg deleted file mode 100644 index 43e56dcef70bbd6cf48fae727ea5f6cb4d63061e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmex=>Y?(AtWa|2T)uB=t*Xf zM-YI8jf3<5Ee0N-Fp~hY0MNI=ya{gaK05#Dyz!p_s7G7?WDi0E0|N^iI|EP)2Pni? znJ#WoK4ZOk%hH{Hw{D%81J)uZ2(pEV8KI4liG>-ci&arT5Udj@WzYDhx7%IYQ0J@} z&l&$O(=0VrCV!b!H>qy&^T^Wa(f6DK>kir#p|#jj3gK zy;7L%uzKm~!`{gmWj7*cnVIRWTTvbpA8#_7L+2i!-j)>(W+%^1=el~Uy0!2a-|gOy zcTW47oXjhWO!?6%^2VU()=|SV(Gjhhx=8}lw!Y8Ya_0BC(74^pBU5+PKG54?zSW6= z!D=m!BS+g+H${%pwQN>lnqDqp8wKTn&J+d4CURT?<68h0m-dPi7AGB-R@YSu-L(G7 z!tf8QzyK4hQhfD`AE*SJLclpdpg|v$E(C#Ljbaod15)e?EZZ$GZ@s37h}Po(jj2I>+ML`zJ-dJtOEO@}jAme#}38+Ox0L{e=3UC(-NEPw4 c<;{yOihgMQw`8jpNA32x_o^1S*!{l=0P;Kok^lez diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_4.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_4.jpg deleted file mode 100644 index d5d06f740922c4ecd4e49cd2aaa90a8293c4e108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmex={xcvIrKfhkD{O+;sc9na`y3^XP=J1+^ zhsyBqEt-{4!gl?_x0zedWloklq-><5dw)OBei?8;Az9A=w4RBTjX^{V8dhxfOn>4w zuWr=sOP-uABzfuS=Qi2t+pJq|uXSF&dj5s%jq5FcM4r-YYkQ+}mH7+1*}9u;wI@w3 zcAeJwETNv*Jn5O`xtygO!4gYm3oO;t&7LrQ%f0V2w=PSoy{k68^u~%=bNhWZb?IKt zWlWvMc6kxg>ju9ojts6*Jx;ROj+eGB)fVmOuLn9*Q~(h~kO*QFfW@Z0qTAz1j~bVG zIf)1RADP!twQtI=eA@!k`hsAf5^y460L7|611N2X2_kzJWELX>#3)ew3LHA;UEO0e zS@+P{2ZnKdKv`D2dO-0baAe^FJq8)i1JnGzZrO4=+3W;JivZY8kohnmUZda0FylhIRF3v diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_5.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_5.jpg deleted file mode 100644 index 1886f3775e047d42bb5ffb2af704f84434af336b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmex=>Y?(AtXBoCs16Rk%1ZH z4+LOhW?}n(i-89y%p|}p0QBq?f!eYRncJt1cdQ2LkQ88GLe;{;4io|D;Q)mgE7Q8Q zyt`)XR+$|B8K_)Z5M%+e21X_pW&uG(L$C&BMn-$ab-UKDn!RpWciy(%)tgRzyVSLM zRj+iG=CayGz_tXO| zk^@`B#Ka8u3eYEvZ0rJptU`)lyO=aUf)`s*e4lK1C9ersW&(hM; z*Zlc-bCWlF$~PW^vo?XQ=PY9;9#;yt+2n10?%vF2vr0NNg%>(-d4(`-)p22PaW_5= zv{nWZ90*$(m|2)u*%%oFgrFh9X3w;B>G^KeIY)!NO0VYKeEc?k{-F|yc0s8P;rX+< zGp)|Po5&!wZJ%bycU2P!#i%SB{u$vi32%4Yvo<=NyD4(+v`AYmS8E=bO%r{J#ex*Q zJiSupEVVqn>3#KUpaaAN7?3Ond!A7M78&-6O?8vx5+BOv?%nkHI%D{ER(_xqIBvnZ z1RnH*j1UB-8+fpR7(nNPjQ~ZDfcK03osW}J0%reBNVi!M5VC6Ze7u@K;VfV$@3mq= yp*ql(!jjB_8)ts$1NDdspxMK~r~r4WK=ivr$7{z#%~w>Y?(AtXBoCs16Rk%1ZH z4+LOhVP*S&i-89y%p|}p0QBtTXKedox}W7<(R^eN)FL4O)PkyqnT?4BsD}d-VysL@ zU#n}Ln7)6N2~e?|Ajo`1R)l&+CKhIPRyF}eLqV_>pjq~ep&^U`46E!#!!Iz@gvv88 zUtqrQ@#H3Nc9kL?gR?e)uJ``lR4F{!SA1G!^Vip(=4CEF8myy!SjA`Kag~@)XF~;@ z8f@x;wn>3(0|F%9FtaeS3P5aP0@<`~*ZNhn*RAT#-PRtSI(6ri(9n<#b6rg?JTlwY zzUAz?VvifwBqb*b=KVaHxV`^mw$F@X#R|z1hb|i%PjyL4i(ca5x_e3VZV>o>9%!Si z00R@ygGgb>%)-RV#>gNbC=3k|HhZScC-?SU(4DpN7ngL*J@M4^2&tpRKZ>p{vIq!> zT5vvc!`5pnIj_%jeR=(KBip3EvpG*cb6wUG7MX77beKnGvf;VnP%Wn!N7YlDrfi)DJX5To5(TfJO*H%>c!Y0P|iA8HR>O3=T{M_EY?R_qLo228Fg5NE;%kk!%Kq zv_Sq5;TMOML%SxmH|$_2RA-6-Y7r4Y)xf}@0C%c@Xw1nQUHpf8_MBRAbn6F&tM&hH F0sz;@-NOI? diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_6_motorola.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_6_motorola.jpg deleted file mode 100644 index 0aa164b78b986bec1177bbac2ac5a181c5423a3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911 zcmex=q=O;=GK3-nK$`y_Vi4qD;9}rnW)x@ci+Wc+`GK@992h+82fI|nCFT%3`C z8R$hMz{JAJ_Wu?G4^Ws%fLQ?O$IH*y_QiBR%e|uc$R4OgLI9`*RSz>86AMre2Pni? znU20z*E}(O|0)xpVmU#O`HZXx^^8m`%={Et7y}qq*^7o>V5kX| zXJEd-eBtBCP2TJ(MLY&)Z312I{k^GDc(Skfw94kMuRqPpTz)iINByvh&&J~_F`v$c z3OY5|)B|mk0@(%x2=6d4voNv>Kx|?H*|cug`c<>nt?JI*)*hZZb?21O(2xytT}>`L zGTYa_$}=|x&fuY zaSKkr0!;ltBg6$!0}W_|Ak+*{>ywSyfxM$C)6-T#zP`FzE G|0V$P?A^-% diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_7.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_7.jpg deleted file mode 100644 index b3dcc466a907a504db72fa83957326bfcc5aac78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmex=>Y?(AtXB|7f@V+k%1ZL zPh`Nt#=-gj76T76BLkBFvjEVyD;s9!tyXc4ynVj56{tsC0AvrU7Ip@p77kE|u`*rQ zlI|mGd9UWm*R5M;=KN;>YLOEJTEoDEWECS53o{!#1FNEdAXq0*%AWD#;@-}*X=!OH zo6RJ}RQ{?=+JDLOm*+44=aHq;qwin)TU&a!_K@zjdxA%`H=X*ieBq*1uNGf8xK-q` z+XcJb7x%6E^>*93TiJ_^cZ;d~1llSKvK7UHOw25dtPE`IP)nIWmVWYI_E(KFtxbNx z?<0Y(Rw;d!w(EDBZ1T1`YJAq@5i^R)_rJ90KM_j6b?i2+^Cvs$hk~b_e?G-1i=`)tpd?Tr{Uo zx|O;?Ip_tt&|u52V|C-?FNFmU_!wk74=@3BhzOu*U{HX&S3v5KAy>Lm Z^@`#H;nhnfX))AppL?%rfs5V$n*d6*1>67t diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_8.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_orientation_value_8.jpg deleted file mode 100644 index 8bc390e2b9a7e8704f824eaedf0248a2181b6650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmex=w%gi1sIrsvPgi1oq?H+6{w2? z6lknWiBi`e^Vg|MgnsNelE88Rs7Fo^Xb}Sw6Ej>FBNGcV13Q}{tAHR_BhVf8j8Epy zylLQVV(?9Tj;l!UW0k^_PwTC1HhJ4+_k8xX3ttxD-{vthxzB6o(^;#OS{Z61Q@dlm zwq9DbC2!U0eG5a~dKehYA23ugR58y7S}F^+6lgHqu}sV?j6e@EK<#7#+4*yhKHp`t z?VXP$jtLs}qzKKNIq#+9%t>21I<}W|mxDn4{&}g-;_~Zf|NMHr^1H{j+g0u%>rQLG zn!{@v9xB7bw`f*I3ETAx-)3$-mpNJLkg}1I?*08B`yl~^6jng%nONBv1cb$)fyHLe zR36>^=hz{Kc+VL}(kI`jPEkJh^lQoCsBQBL=UctW{v!DzamBJSQK=|%r{hO&J=>V( zb2(i_@% diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 309d3a80c5b..33302edfeb3 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -173,9 +173,6 @@ private slots: void invertPixelsRGB_data(); void invertPixelsRGB(); - void exifOrientation_data(); - void exifOrientation(); - void cleanupFunctions(); private: @@ -2649,36 +2646,6 @@ void tst_QImage::invertPixelsRGB() QCOMPARE(qBlue(pixel) >> 4, (255 - 96) >> 4); } -void tst_QImage::exifOrientation_data() -{ - QTest::addColumn("fileName"); - QTest::newRow("Orientation 1, Intel format") << m_prefix + "jpeg_exif_orientation_value_1.jpg"; - QTest::newRow("Orientation 2, Intel format") << m_prefix + "jpeg_exif_orientation_value_2.jpg"; - QTest::newRow("Orientation 3, Intel format") << m_prefix + "jpeg_exif_orientation_value_3.jpg"; - QTest::newRow("Orientation 4, Intel format") << m_prefix + "jpeg_exif_orientation_value_4.jpg"; - QTest::newRow("Orientation 5, Intel format") << m_prefix + "jpeg_exif_orientation_value_5.jpg"; - QTest::newRow("Orientation 6, Intel format") << m_prefix + "jpeg_exif_orientation_value_6.jpg"; - QTest::newRow("Orientation 6, Motorola format") << m_prefix + "jpeg_exif_orientation_value_6_motorola.jpg"; - QTest::newRow("Orientation 7, Intel format") << m_prefix + "jpeg_exif_orientation_value_7.jpg"; - QTest::newRow("Orientation 8, Intel format") << m_prefix + "jpeg_exif_orientation_value_8.jpg"; -} - -void tst_QImage::exifOrientation() -{ - QFETCH(QString, fileName); - - QImage img; - QRgb px; - - QVERIFY(img.load(fileName)); - - px = img.pixel(0, 0); - QVERIFY(qRed(px) > 250 && qGreen(px) < 5 && qBlue(px) < 5); - - px = img.pixel(img.width() - 1, 0); - QVERIFY(qRed(px) < 5 && qGreen(px) < 5 && qBlue(px) > 250); -} - static void cleanupFunction(void* info) { bool *called = static_cast(info);