From f5a6de72803567d7221dd0f9288037d7bb514613 Mon Sep 17 00:00:00 2001 From: Mirco Miranda Date: Thu, 20 Jun 2024 15:45:08 +0200 Subject: [PATCH] Full range HDR support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EXR, HDR, JXR and PFM formats support High Dynamic Range images (FP values grater than 1). In summary, here is the list of changes: EXR, HDR, JXR and PFM: When working with FP formats, the clamp between 0 and 1 ​​is no longer done. EXR: Removed old SDR code and conversions. Due to the lack of a QImage Gray FP format, Gray images are output as RGB FP (recently added code for Qt 6.8 has been removed). PFM: Due to the lack of a QImage Gray FP format, Gray images are output as RGB FP. HDR: Added rotation and exposure support. With this patch, EXR, JXR, HDR, PFM behave like Qt's TIFF plugin when working with FP images. --- autotests/read/hdr/orientation1.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation1.hdr.json | 5 + autotests/read/hdr/orientation2.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation2.hdr.json | 5 + autotests/read/hdr/orientation3.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation3.hdr.json | 5 + autotests/read/hdr/orientation4.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation4.hdr.json | 5 + autotests/read/hdr/orientation5.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation5.hdr.json | 5 + autotests/read/hdr/orientation6.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation6.hdr.json | 5 + autotests/read/hdr/orientation7.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation7.hdr.json | 5 + autotests/read/hdr/orientation8.hdr | Bin 0 -> 307263 bytes autotests/read/hdr/orientation8.hdr.json | 5 + autotests/read/hdr/orientation_all.png | Bin 0 -> 32296 bytes autotests/read/pfm/testcard_gray.png | Bin 7550 -> 17634 bytes autotests/readtest.cpp | 3 +- src/imageformats/exr.cpp | 121 +-------- src/imageformats/hdr.cpp | 315 +++++++++++++++++------ src/imageformats/hdr_p.h | 8 +- src/imageformats/jxr.cpp | 111 +++----- src/imageformats/pfm.cpp | 50 ++-- 24 files changed, 339 insertions(+), 309 deletions(-) create mode 100644 autotests/read/hdr/orientation1.hdr create mode 100644 autotests/read/hdr/orientation1.hdr.json create mode 100644 autotests/read/hdr/orientation2.hdr create mode 100644 autotests/read/hdr/orientation2.hdr.json create mode 100644 autotests/read/hdr/orientation3.hdr create mode 100644 autotests/read/hdr/orientation3.hdr.json create mode 100644 autotests/read/hdr/orientation4.hdr create mode 100644 autotests/read/hdr/orientation4.hdr.json create mode 100644 autotests/read/hdr/orientation5.hdr create mode 100644 autotests/read/hdr/orientation5.hdr.json create mode 100644 autotests/read/hdr/orientation6.hdr create mode 100644 autotests/read/hdr/orientation6.hdr.json create mode 100644 autotests/read/hdr/orientation7.hdr create mode 100644 autotests/read/hdr/orientation7.hdr.json create mode 100644 autotests/read/hdr/orientation8.hdr create mode 100644 autotests/read/hdr/orientation8.hdr.json create mode 100644 autotests/read/hdr/orientation_all.png diff --git a/autotests/read/hdr/orientation1.hdr b/autotests/read/hdr/orientation1.hdr new file mode 100644 index 0000000000000000000000000000000000000000..eac2383cfc72c10f3891dda05649af46911f24b7 GIT binary patch literal 307263 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 literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation1.hdr.json b/autotests/read/hdr/orientation1.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation1.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation2.hdr b/autotests/read/hdr/orientation2.hdr new file mode 100644 index 0000000000000000000000000000000000000000..a6a06548c17b3d2f31de0dbe721f7f043094b70e GIT binary patch literal 307263 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 H(7^u>9z2n$ literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation2.hdr.json b/autotests/read/hdr/orientation2.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation2.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation3.hdr b/autotests/read/hdr/orientation3.hdr new file mode 100644 index 0000000000000000000000000000000000000000..3ca8ba6a3f09979051bd8ac93c570b5d1668a6ef GIT binary patch literal 307263 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 literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation3.hdr.json b/autotests/read/hdr/orientation3.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation3.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation4.hdr b/autotests/read/hdr/orientation4.hdr new file mode 100644 index 0000000000000000000000000000000000000000..dcd960c11e425c46eeb494dfc96bd6b21367739d GIT binary patch literal 307263 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
|?SOE_|equzM!)~y!Sl_|k~k#!_>W!doAy|K@z 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 literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation4.hdr.json b/autotests/read/hdr/orientation4.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation4.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation5.hdr b/autotests/read/hdr/orientation5.hdr new file mode 100644 index 0000000000000000000000000000000000000000..d4b7f7070ab7f237a1be9d84866fd0bd9d43d218 GIT binary patch literal 307263 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%0AR@ECoyN#HMV=T(pMN4~zP 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 Ee^Wz|r2qf` literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation5.hdr.json b/autotests/read/hdr/orientation5.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation5.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation6.hdr b/autotests/read/hdr/orientation6.hdr new file mode 100644 index 0000000000000000000000000000000000000000..dddf31387f07daea742270a268dff28e82ebd9a9 GIT binary patch literal 307263 zcmeI5dr(u?_W1w({%Tb~>ib#kwO+MqztvV-pKYxz{YiZkYqdVG_&}^^xmYF1UX2C$ z0Wv9+8|!31E{I$PCX>q`g;Fkqz-5p!l+sKt@-5BqrId?%io#*+zTt`FWozT)tZ%${rc;#z=hWVXMi)n z8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7 zoB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+R zz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(40w`( zmH8&fYVGFvae0nluP~5TV2tW$y~8}oJinLwb*%rvYS>iW0mhzQuW&WoHg5auv@-nj zQqJE)rvE1IxW-6)cI(;WFQ&nqcq4q+B0oFVkRA%Rl_te2SL$T_I~nfpiJxcHt&8_w z7x)u76pvF5n3!*139Kw?g`%z=uebT+l~-W?hW}Chztn=L6V_r88 znXMZS_0!wa0nK$ukQo*N>d;&^WvA6Xi+YiczI$)6Nw4U=t`o;YeeyCsn6B#SZU$3z zEM$a+!1ZuFTd=3!UVEc%+tE+@u(2I>RkwoCB5$9`8};+B-LoBSZ9sh|Obx4r32TzT zCn(=$pFR1kJ!lK3zmX1sC+{k#4@hFj&lhyCD&i(P5POgN#t%tbRR+p0XuomkGz2Q|vyzfQL4 zxPrQ$Z2To%j)T;%EK%aQ{5ZC3xU)W|o~i@?kl*ciBR#it-*pCW9)$WLHS}1_USUr9 z+;x@4C~aE0tsGMR&c|xtrxqjUZyefR(XXYr%k{H*mK%8-%#ByzSB%R@+uz%-jn~dA z*M4-8TtK3u6ITLeD{3GCa%wfnXD1^cqzs=So;;Ry^xppRg};C z1UB_hK4>d{ikcdd1W&B3W?$j^6^S9T`n?SHEc~;6PV+B@LQGh$;8%z&($R0dr5U>0vaw%krDyD)YHIVm!< zvVMPDF`a2&dR|F(H!!$T;j{2dHZ7z8PSm#p#il)37Je_!)ps@8+x1l)IQ~%wkFQO| zc=RosZT3bxv^SoEl5=yQ^_gkx+6F6+OJB-V`v0fJ<{NvXT>PG6!z7KVzEVr$ZFM-_ zmIyvOZ`gPf`-EhZzgFaXy}iR5+To8k%UEz;zAz@o85kP|JXw!s^lbwhI)%Aa6JF5b z*oS@qZ@xI@b^+(YWS$CvmiiRv?e)(5)cWoocs8dICjQ|vEPwe2!4}6pHBXhY(icpH zo4E}hhy4)gd;(Fw(Q(cG>ns|_Kk5n;VCnR}pXu|Yfd#y)Ron;;R_LGfXN94&pu-f+ znHz`9N%gD99F2c`@sWWQ#)mQVrZ*z*Ftt)E7Ie&%l*mKb^e+^A70)JEX={?FH)!U9-Blte`1zWoA znv!gAenF8?<_&Kf;PrFmcIB5_J@fK7*Pl}l-xT=kY`33d?}|TjN2kD_&&~{w^0!k_ z2%0=&)ZJ$nskAuWkyp^a{^;8;GuYY8fARH4_!}K>ocjk|$J{R&jC@;Z*?;f*K@^R z@YPa*zf~7Jn~N&1z!H^~p|h1y%3rJ|1uDO)sHY>6m z8vEwgJMtG}w!p-f6Ro}no^Pu5Y=8f5Mz}Elz;9bR?5$~oEL{J4C^Z-6h7|(&A{Y0+ zY}1XN_&xA@jGZn1@y?HeP9x@gaIMGV>oTl9Mvxx!43)ry)v?HEf8Lk-ckg>t_gUMz z2U51qgikRC0>uJFQRCmqug&J{jYHkn{~PWFU1T^ot~(+gr9z*lDnBhg4kWLG%BfL?3r09uva!EbH`9%)L>@ z+j?B<8U7m?$#45*y$KFivSkeqb$w;ov&*dx*#X!0;Pw|iJZv?+q?C%YB9O`=G z{qqh3uF;OkgkSmkQ;*nTnqS}DnjzeaUJoVXoiAtQ@2oIE-N9rqJoz4^O?(+N|M3Fc z_YY$i7Y2gAeXYR5quRHD| z$7{A|OQ2+31Z4WX4!Zxd9_6J068|61gL%dYmb@htI-0Eg6gfT%m1*`zt%5J>AM!2h zmdqWM`nMx}?e1sI!aOgUth%VlvlH2@)5VX(Jo}d9LMUDx4jDeL4dBfggY+Kh#5?|n zS<q)V)|`^G&Zx)IuTw_Kob>$Blw%~{>2A%0;?r{=ajqW|Sj_tg z^IxU1x#vs4&~A}sJ&)x1q~~^(HbTiuk&rz#(51d}#h>_o^nW}DWltVsMVGT=S2w1L zG)O-h0u9AlyRy|9A~4s>=tNq7?tb0fnhnKg=7MJK6h?X2GzIsgd=_Fpbae%kbc}Bn z8&0J{!5gv}s?rxt)>H6Jmxlj@@4{~rFum$H~ z1-zS}@O!$<3u7`59>b{E#y~%BAEZs#1gVd00NrEG`+6c@!#)1&bA(l|h-Aj{dOLk1 zH%`hh*SOruG@SC(;`-m^Y4tE|V+W24Us6ymz~OvPF6Z>LbwTOI^N=%r2c!~v0)HFF zltJ=O@~7=(b(tlyZDXGx1M>+mz&6~2&?50m2?^U(&*|oEF=BEN`^ulx6j{ zwU#AI=d1F9ra`AEPL{vp;nq*}+i^lHIepTrkUr@Zdj=8(Q^HkXZQ=!AC^!UBU z>KUZhF`mnWf+Zo4F?p*X_6(98MzLd%bRfzYG1xkJKfC>cO4fc_PggUPrA0zYgnmFy za{nVgv)LDokmWFjBCTWo+PP2MmRSWQYtBHH|C>T=*^a@9q8=Q`U>1&lC%+Roy(cy{lq(K6B5Rt|dQ2?#l6zaJ9iq@1|fIxaif zYd>n=D@R{fKYt%&`ffx1NM4iZK(xgY26JcZ!dP?!G@!n0EvdtKZ|y*_JgKxdwty+A z5Nh^bhQbx0kp0B=VU3s2Sjp!Tx3Y#j&(2?e(Dv>y7lMJEfQS>hw!Y$nUh`4;e%;Y4 zP=t(R`n@5H=elArXZlX44bci?xl-1K^SU{s6iS{CAC^ueJ6ydYLe_Rz$_DL!zBsD| z^K|5Z@19c5-w5WQc2ze+>5Gw&J7Xtg3H%LYkmeXvqaJIoYqryI!{Lt3sjaDp8kF|- z4lqXNLH<*Rtv)o44U2YHdZaOuYZG6`y{?jF+pjj^9J5vVW@Ij7z+k^!u{>1Ns^M<4y5?=8#qVH_pKs3Jx8&bSvYUu=g&)7Qw`FIqw6uW1V1V4*T;W(=UJh+-ZFc8K z&!^WFo%w{*kQ<25klfXQZC zi8)%A8H>5F%2Fetr`xmp%{c1Q@tA*u<`tCSTq>H=LjD1X$RNE}os?(C73sU|>})}Z zzr4IWfx*&Jdqy4kD=n!4eO{5E1M~As1qPd%thT)L#R!*rkmf0Lys7nSKk%{tR10e@ zrSa$0xaKH5Gz2=#@)@%kkNG#M1EPhvN%qvYYzzwgp&l$gs)6qAZb3wz>g($vD=SNo zoSYmRe+2~vKzdO;&+%APSSIjCI*{yeem>e_e6J1t=Jxt#C|r8fsSc!Zk-bwg^8Ot!QU$1<|-$Xq)-tupBRW(8RW(E2kyC7%U4&<+&LBn%l*iUP<@kbmI zQ`ObgkeQh&2}VW?bs9b zU{h0*z#i#9;!mmr&1Ule{a02->=od71$GQtb)eM_H#VAt@0H=0v)K2O9?1r`ZjAG) z4R+Sva(i#Q<=?2;a~XMhwK(fQdMdgAY-I9g-1UQLN|AOPfH~e>S{)UXHjj#M0Rj;d|5XX9R zXYR6NumG;QWKXoi)DJ8!E(Y>_jYgwW_Odb!*iSUr7|hMJ*MVYRknC`MeWP%Vk{8Yl z(1Et`5JQF6Y%uA%J-FxFlzmmW$6y-fd%27fKcsj=M~;X58{LhqQ1L1gd=DC@6&W-v z*bi0ZRfF;;GU%x9#J|hY=4NK*L1u;?vNBQnbRg+IM+QYZTwGKEot>RfcS<*aKeEL% z9+w|spa0gAZ9DUQ!vG&x^h*Xida{h;>0V}SF;r}|&a2Oz6(r0R5E$Hg4)vL7Nd8c;necxr7lx9l@8!eNtOhXk<&g7a`K0%1Jd+L;uYure&^%L- z!L0r2LHmA=eL+#@(UHbD($jJvo%loP*MZI$9Ow^MRMZMKSU+#?03G<{q#aDN!8>ze z)@XkgV$M51(zC91&+h3VZL^_Xm(BBMw@)4ua<5Siwrt${_nXuGe;YQhQ?~T|y<*!B z%A^|me6B-Xe=I+53`hQ6Q3~T8G*?PwFc0$;I5IZW-y(x%b1T~1Jb}TCbh5uFHajfo z2MTt$5N)wNgT=)a0)I4rOX~m9YvS+wH&eXggG@dAg}`5q-ryDeJKT2P7h46TLHm_W z1v{{u{W%=k>(4>**5_0^nRSg#Yjrr>Iry^ju;x3}aIZbq=QW;AgR+emKtJ~#I|ft3 z<3`M%)D}16xEgUM*kHj9_cNHCg+6e$=ns<}Mg}o1DB5B2Lx^P>i+1GCGP$7UEX_0=6!WPDpBivy-|90E@WYTa*@BQY3Y!f=e>O7g8l9DKcoz1pBX)W zQU)6ui~@s#4HoRMJ%i+rSp8uuf5c#6fmQz%EO~zbe}eseJ=y7RTdY%e9S^5|C-9eC zD(~?R?dko>4T^#L(NVnwX}@I&A-in)FM`E`F5!~b^q(mr6RH9(3iF+5ZMn!`?$J0f znVLqe1EmaBSJzqnkUn2HlVUL_Ry$03urDUvrvppG{@#-Ld|xtF8sAw?_+W-3(9ew=tN%`V?|gG;01RhFo4=4QUvM zNlV3848>!xFGzMci+tfe9cUdFvFbq44wLU<(&Rf`Pe<`*eQ2Ur>gzb}<-54R1W$xn z`++_|`E0@qS77qi67btu4t~2TT*_Ft+iKcWZb6RRP@<(E2(CQ0QJjNQ6mNG~-I2Xr;DgI2pM>&oOT64_wujv%W z-|BRQUg2-B@r|KA8!j)8;(2xNB?;?33=0oh8N{(STK|^we%y#`aC38uz)-3#3rL8+ zR0)Hm105Oc9~ZIez`EK7w7u;@o}<(W(i}7E;dh^7EW_tbulOFs1+C>6t$30v+HZZ% zsbcs)PpH9XK`V16o-EH$_cET#f+`#X$;bXa<<1oZ87x|lIZe~EggGhHmvbewmZ-3> z6s}&)0NvG0K|}`A1^t(eV}PjY z%6m=vP<8Ez&tH$YiGIdcQUA4Kp~|$tU&u#UjbkGJyKRH=y>bgw0awT2h@9LF)1_k?z`p?E7*3v&R;50>gd{o=!rg-o^JoKi>qN4~8=UjSFMX##(C3`%Tp ze?O2|wE7|ac9{6fgNlk8q2E_?Fv&@tqfK!6v2~C-c^fko$#>kzWhve@dX?RLH*qp()sF)hyksRb>z@eeuFBbA{u zAJ>KN!1ce&kJ}iu`6C#Y$=h}ga`W_q_62F~Xl7=vT|baGw70_|f7T<-(;_==HsBm- zoO^Ab=g6Ax?aG7=kmI+5<(`qp9uC`!+Hk(9{aU!0M+S~JOy5!f6W8N7ccW*=>k>ZL z!?vIOn=Pi?kj7NgwrbexKZj|K_m6+bg+D4s?OqM8L%IO@nBUo|0}p{6gRh+v z^q@0aEb2vKsivk5^;|YkUr_WzLgCylu{<1g-(b-vcC7y50XC(7R4mIvMKMK=4}To4Uyr%wv=u_`ei zc~0o7w$D6Kp5fl3qqq@jcE$;7AYC%JIux?B87_Sikwc0A#0%9rE6~H?jVbFz>FUy#Cvvy)RqJ-+(T2nk?B9>$u^BPMD8hfOGF$GWdsskhOZJ8Hd zE!bUJYb7mj!vKX?7r?%{w!Emi({%_!rXZ9U3j1QF8pPHNXsv`*G;i{s1A$~ z?6AO~)F&1h>>DEy=F8yR!Mr~PL)IISf?mu#5ew-TG>{XK1lhqckhUHBjW3*lT%6x8 zy@nOxcAm*4E$l%vALs-npeRgf_&ARg4o6CGL&&#j9{d0<`Jg)d_XzjG}N8j<_ z?)LT`JLXofu5HI0Gea;4lV5^wS1Dw*FU_n2IYOSHmTvo;R<8J?d4lxW{3Cjg@^@0( zrqD*bE}P%&X!z^Kc`>zn5}_3L6(s(K#h}9+esL`mt*3L!pft~sB;T9HcME*E=oo7> zRLQCiU-`spe@|ptV`*Z&y5es|Sen3JkoG%|^4DTCM%5b|WL0-!U5(^Od0}ebNwn_^ zN^P-J4@%~)QVzGF^q@4yj5ODl)^96(Irj*wNz%)%{zA_u3Or2>Yh}{B;?DTnk=J7L zmDTZAJ^C!_gWFUgah{F&jD)L^oZD4qL_K&JiZDNipaUs3IDoz+s4sYB$~Gulc!K4ez`Rl(>@N-XUOkppSQBE6zxeH|W-~4{z#e0lz~pp{ zKht=~S{x7YeanC`LhC*u+b}mi?b$HgdyK_-4Qb&Jvh|vB+WQ5trK|;ZRJ9I}vAB+s&)^mR*Wvb4;jB6)+oNqY(mFKP7sD#d z`A0f$C|P^>25U2VejlB;as6fBv2TQUGtGT=CL?`rZ=c`YV20X#8e4zRRcvrj28H|{ znB&8a!M7msiPymN%mr5OrFo?zt=sO-28hPJkSNctGX`m28hGb0SUMZM@>|*;`;8J- zPiM`=TcEY>s8bo~Gt1$8+J~_AP?E4--KGbH`7-w7bXK3Ze=U>P7ZldEJ23eBvKaQu zmK0{jy&L54j3X&SkEI=2aQvex>kJeoo`UkUGtgWY4?PyMSDz)d;HRki3VE-QA4xqs zp4%K}fSTep7;9bg`(uaGV zT93ICOp%#_E~K2fwmDm3eA>2_3D>n#e7esk&X~Ou?ypW@G0z`__8R%^?=~2B{s*gJ z6OI8JaleJZ&hz$Xzh4h$b9d_)?T6{@vbg*H-SuXu$31JxaNiIshmvtR$rwrI+#raa z8vt?ZgQ2NZzH6}tt1q#y=d)YS9)B?n=ENJ}L(GRi*mu0~*~G=k5Exvf2sn_gn6b1* zHEBj7a};ls%boY^LJm#J9AW+p<DvkdOO_Ts(H z{a)IO!8fo3Ru;7a?SJI%atw8S^|T2vlnix^@%*`^3H#;Ag-~$r%D89Ft{rgPx7CyZ z26ZUtBMoe(6aSaueiPOt!t}^`2*TK47w_A8{r70shBAyRkG6chJss%pCP8Lc2&i#B z;1rx^Alhj0=)3n8oAiqN$8ugPAO4;PySo6UZ(&@--R0re_l*84?dpZ)1~W{4%>cf8%WS+6ceE$m2Pbk^ z&WA_c-UlN7?jKpmGPd}`VDkI1MU2kne0YWrchqw{&NG;+F~Q?6UbW3}5%nD9CBJ#W zz)G*2!F?4yH-AjGVu9+{-p-*p@9l!LRe0`0)DM4Do@MH(I`9wq-A>05cT4wOXYl4h zs4r4`eeCT~X^ThkIYk{uahL13_d;&uaWFSt!SO@y$NV0}_IT8uS>(@m&zEfC`b?O~ z8io0PJjOSE`%>eH;rxrC5EGUw_!T0HboASIoB8f2f%O#_ckkhCF`n9VJeIYqqZUf9 zo`HPyGiWbhDT|~V$roOQ`C#OnpLaagJ1_G<-9|CzS_AGA8uta8>o6YYv)jNXZpwnE zvxh%6G1@wwcA^ljR<+suUs?kk+1L(7i+$ge&Y^QhdmsM2fegr{PI`Mfp{Yg#88{xN z`#^6uKJ4x?QcRD5+Qt>_8BXt|Xwg5C#9HVa9{-asL(;Yy>Fa9D5wgCj1IIt=aBtRB zj7M8@<&%9L>9t0BKIiY@WNI)DjL6$7xEC<-Msr?#cHXe-3leu^lfQPc7tCPS9_eSC zzlWbcGy1lH4V}W=stGS>aqL4sfH%s|aRKMTWS$CvmiiQs<|!H}QzJQ_^Y`%cC!J3q z^?BFeddz4X|EMca;F>q@?9D~|%?i57{I+F-Ag^2%`gwB>ecS&Yen#iexg%klpDPcx zMdoPyV-J-^zaf`rZvBnxkk@L;fjg|;#r_GRKQh!Y zBEvpkuRETJ#@Xh-@mG~DI9QRf)gM}G_Ca@BF7ADq4(9SV;qr5S=$}_cEq=E~)h_e( z^X{mh@pjEuBCWY2*M4-<<=BPD9gVf!!S$GqvKjX)q;uAXyMMpxk8ZTGgag5fCViw! zJ6olB2MTcig@n@IT|U!zYo~{`yz4)=2<*IZ!u7rnB7a$>&T}UnQfdVqx<=FC_V!lh z-c!b&-8tla{_C%QQf)gD$LHV6ye~MnFW3ErWY_r!hvF|Kr%>Q;-Uqja#7koRf*_Dgo`QoiCr@5jIIUjNyDpLJ|4y|BWiJsXNYeOaBrpZ|XM=O3s2R^#I1 zT$WYjB{nu1*Z)@X@ei5nKi|GRw)7RQ^LP)%Us=6L;E!^0i0$vLBaNxW#a|whKRSnx zzqwa;jYS*Jz`YiTudBt*`*w7X?v8pvT+J~sR9pG;-R+tAS2LF0Qca$f$_5iUhw~?Y z{#GfhbN7yGM?Y5>a;gOVNBf41#cyJ;YkZIUoR35XyB7b<`+S}?+!OTQl0%6@+B8?~ zwIRY9!+B9%?RNfLm4UzSeU?Vk2GL3B*1j9&a4}%MgOOf?#!aSv@U1n5a}-AW{gK}9 zWwmQRNqVg&oHOgUF52zok=~QP9{F#8a*HqO+h@Ulrv@y8jKevr-<9VK0>9LUEX*%( zdwXm1j8T7hCwW z+V-eEqABx;?KOn01|yEIJssY`x*dKi^!Mx?=@9VlCBrog0)>ch)Jt_6Qj7 zwE$>K1sh6wjK+fJT{c2;+dz9<(Afje=*=);T|cu=VZPorRz~u`l=Z2BT<6I==Ir`6*9%37 z=V8r(f$Q5u-ozv2U;Eu~i+OABBYKAJ_ComYca{lpzQh-2GWy%~vyH$WjNA5mIG&OA z5j0iDL;BGWxN{+&rQp1mILrrA8DU^4L5HC__ng=E+;Zfr7xzm1B4`ntw<%3k(lM~V z;CMd&`{7{JTkS|=8Y2;Jm6PB1;pDvF#7r28a1I_$4tTrrcI6Ck1~>zp0nPwtfHS}u z;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp z0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n z8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7 zoB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+R zz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG z1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mEI0Kvk&H!hC zGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwtfHS}u;0$mE zI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwt zfHS}u;0$mEI0Kx4@xs84ax?V)%G+zawAaH{&i|KM5H)>Kw94_VCNy}m(uBnrA$aSLI z7%1wnz?{eum^??rG+D-|o^2bHIoqd#;k}t~dGS0|;IZ3^x8rNvc7IR&w)j2drC(dn zwyx0C!<6M;vw(L$RcM2Q6?ZqzVoimwBWFGRto2$zcVsCGIDbpY+fZI@IG)>M@$(-G zHnw}sB2~$`C&AKL)z6%Rt;tB!Lfuz&QRDe}dD-Rl+qv?BAG9}~bIF{vy;}0KA#MH4 zVVx`e9)B&bHkVU-OkWhIDzB(_%9JiC1(s~lsN_^$UY3W8W%6%J%gUVc7q82P)Pfdn zZyov}{5SC6zk%7YRX{@gO$*ftuf_N1I3uD2=Dzqhl|gxs`x~4;r~2tZeuvQuC&9H1 z&kMc>G3Y2X7V_t(=cyXfgU9^d4^nRa-3Qk_a;d{!ODlY~f3vcrI2U>?&35u@4<8Gb zOFKQx<>)Y}1@0c^XXMW&FP&M?Zh_ivYizlr=T{g?c>Bq#{lzp0g-`e%Rgaj_TFOj z_oNw#Y$y@G$B&$$v0&i-n~T_$&5MNipL*H^7)r+Cp8Oh|UCsb!KyD07n0Fbf>YdMZ zNlvN{uQ79=Qai??&oU$b82=r1O}@Wa{JBj@{E5yuEtz1B*b4xPJ!@Re2p*;o`-TQe)IeqBeNZ? z)fXW4<#o!PiX35_nAhLP>Q9dKRoc}HTFh&!YnS9TbAx^xt7oswiDLm_I-dVP#%(lI zTW5FlfdAnNm~z0xChxc=$jl@8_By5aS6Gy6f;mYhsOgdqo1g~F|MC;h|1wVbJ5$yU ze*3Cz+_~frpD*U+w51M}H=jrCZ% z?Ap*Je{G!tfApOPx$khkYw0Kjm(q#48gq>g=Q{ix`SLhz-*x2gI_pN?R@zRk_{*tj z5%`@%P$Ay};k*nA@DcaoFFN8@GWc)B;a_ zZ^l8FLF{Wm5I6s4xX6!a&EITD|seCu)N4MyW3)IStIo4PxL zm1XJ1fd%VXCrM&Uc9v%;uF@I7&cC20x#>-fLX2J2^p54oYwdjGzzENnhDx;RZl&hruw|;qd znX0GT`QDggT@HS|(Z!6$iaF_ZJl_^QV9I|5GPd|b;-bm8$L|y{>NlcI_MTtv`8pU~ z`+K{boo(eX*5b)$TA6Qxtk!N@|Id^6=Jy((%#UTe^Sh`l~-W?hW`=#-xXW`rJOV)Za_ZrN3s3J z`!lbM`Cj1Z!?@I8@fUL?OW<|cCuWb@!l81H)92&8Egr@4&k8LQ_{%S?9#;Dq%4!Av z{0}&+O&_NHeiZANKeKE9*>|^fZeLlWbuQCTbyeSFUH{>;GsC0$Z>Vzd&t12%oa<)J zVe6bfZE3@>^j}VOlc4{m@AK^XBcB)3VJMMvJ@c|T|9u1`TIbZSjm#Jpe_J3=;BSMv z+N1iJDHsU(qFX#Dtv^-LtzWd=PRoMAYl*c1K7UXu@Z;IP3|5j9z znC>e6j#BhZo1*A;iz1(-(xk{E`TIAD8ze=y73ukvg6Q)8uF#U)C{lcyo-as(E>A&n zNqa+a>C<$Dnj}G|P@egVSc-cV0BeHfVmseF(=l=Rtv1H>Hxo>67bob zE1dWAeq1lyZt_}tJ3d!+{#Dp@zQAkw*QETFoU2p)BfL&^OO#XiS|Vlmy6jYqAb+_~ zrn(S&Q*|Nwrs`bu-}>aH>QDIhpVWU-on`hCuGFi}UdUC2pR>v-Jf8Z~Usb2higI0b zG92a9b=7e}{-Qd566JWB>L|%koyt-7(cj+Gf7F)ERr#j17440xYu=ko*en3 zHtcGzfqNOHY#Od_bH*O6kGmE31#53Ek`;SY_BWO3@J-&QUYma^1^~WcRmYRnKPL*Gnr}feu^qp1$nIxE#=RzR0E|LBW*6KhnVH>4-jYk-I*VW43d0g z6Dx-!=h4|cn+xkbs2Db6g{{a0P_Hz)c$_W6g_fu!SF7lfgF zV3V=rQRI(&Y`O7A^ZuqD%n@SH&ivlN-g75!; zf#1$kupbwM_DL8XiA6^qt$J}Z`mx}Y7D&jaksE(ON#!>7=3s0unCCFg zd_7#x6rs6H%#pP`JeQTDZ`{_D~)JnX;f$RBYh$`g5UaQn%@b>MB(kw4B4WgQDn z^ohtK9mkeOx$(C;#Uij4cdeB5bhp@;BE9$g;b`06J(f0zJ99!{b?Jq2+xw!Pa_3R* z`>zhhA945r#!VglUdO-5-riks%qIOT5|d-cqultLdiV>0zlJ*dy-gkY6Zz8J`X2MK zWw6uv{j7?gx$`LJ{a1(Lj~KkQ#Pyg2u}Ja1dkc=Bga~pMk7Lc_o%!Liv%i$v&mZls zBRiB|{67!%>p$`Hs_JS%2fmp4`+)C==eYCueqB4vzE}ZM59Pyb+=Jmn{or#Z+*ua! z+QZ>*d%cN~opscE{eP>N1^FYfaws0hj>qVO$+8>&opB&X&}WYM$ERU_@ogEuIAN?8 zrXa7=LcVnJ*@MMc#P)P{Ea|X--?Bs|?#V#;*TmOTo=Il(xwG$i;=LjHE5ZI?u?F-n z#16urn%$j$jQzae5HfgJA|i+4adbRZ&kteeOG}k_3_qHV={tPP4~x3+Ik)}=lVmaZyftrxo6@}T70BKYRyF~! z)p>UM| z<I~eb{UHckTFd)Oiy2eD#;XH}5hWOLQHNA)oj6 zC-myYH5!$lp~#Lu33HCzn9B2D6~>^YV<7&!ud(EFA3Ej0 z@%v->_m$!}NJwZ=_-#ptr3MqM#oXfyGwNaDl8ca@@Tp>Jb{woPZH5=|eNo2p{)1i1 zjz9D>sITX!_eA!5bCAL8%W!L{y)PWSJQ%0xIiE8))caSS*#TCYZLc5ip}y4I`9Z1s z0fiVu8BhFCozr~4`XVJ1#)m;oUL3R?B)F&gnu+s8(*ki5cPILGALkuAy+PR>B0K)5Z@2J+;pa8$>FNX;8=3ck zXV?D{x1G2zn8Mfr@7J|C6>qU^#~-q1>+4BvF6unr3>0L~Hx2pAxAK>;*BXzJ+TUu8 z0b+a?Lpt);nAFcHy(T7!#|BOR`>DvJ+V_trO9i>HB#^z8kRb3z{E-lU0WSE<(BEWf zIeNH~nG2rwe@Dz8a^Mqmo%!y`^=SMhG_w(wZYWT?>i&G7=I&g8vuV5$Cd*4J}n&qo&r%MDikd{W}z7#M8)rN4C%?yk*XQr?`s zPM)&{3f~G97!~a_+3J5D{D4o~Wvz+-Af##Q_MXTov7r9XLjp_0Ue0@o!fX8RV^>mo@EoKdgYptt!8Jf{`(mo%m~(%01gE6f;Pz8H~_2R;7%hE}1B z>yJMtT)L!aG@z8=|IQST9ZWOJA2_UXSw};DZBwI{6(A)e;+udAOBJBJ7WLQ3HZ_&eG(qS%u?#|)mXp`P! ztX^lIej8FZ;X2>G*!PduRV?5@x?=L|To!oDq-cmcC=dH9@o`D-Ib)CP?egqC{*XPN z_*ht$kuI>LS&O;>*RA6}m%5KW%Uba&fHB91?@13&Z+! zVKC}K@`2^VAGPHt`Q{PDU&QwJ`mwhQGPg~KYqR`V+>*)A-Ckg0)6-?M^FR9HD|YPl z={%plz8=|I8-K{&DBr+P`r8x!(ILC$J z&CYZo*8+{pv_&LWz~Pg z-sBkMFU_j|NVjRXekd@Qf9k5h7riG+&1nD)vRC-(UfX9UK+R};m*y7`gQN$ELDGZg z`}CmDCq#QJH~z}Id!gPk{C1`oa0g0npB)^mT^{ta-4UO&rK@zdKA)@WtyrytXSe0Z zL;pGW8PwPFNk$vn=VuUm)ZY{BZANo5kQ8DLFOe}iQXGc*f)}T*f!vjw1-UwHF(moU zhti$)_W7^heW$Y1cVu^wHS$5o?vmakKbZP}a^r6^<~^m{ldD3?hSh$%ldbtu17qE9 z?+z++l?f61hvYB!^H{d`V;SWC!~AOl^`3;izP=vmyhXaJ0(Un4TJ8BG1}PR@bSfE& zUkwtZ_OueZ>l*DirStw=R;D6dr|k1R9Q%FJc%a<)dm;I*-~$IMhG&C6jIqXV)@Xko zk_%V*YPj#G*4>Y4{qFXV_qmJva-~+@mxcdJu|3hp74#nV^+cUVeuiLgW34uKax@+< zqNt-`DbA-PmPRAQAH`an*;`u-rY{~XH~!|IwZ@Y(^Gk=N|FUuHn_@Q8LWVzPJY3!! z&#S|jis{FpIsg9NeOCFE_x3-R_W!K*78!J~w@%qpBYO}HlNs`NW%T^%ZrxImZ6%+V z;xA$hP#S-s@emTZ@#hm{o#R~5&@?Rm>W$X?_dd99gCj3v{kI|EymDt`@{spAq`t;J z4%zSh{JUg-B|ffGy=T*T{p?LvM#B^8cvz}UgQY2blAH#sVp1UXnS+q>%q}pj+#rY^ zk0dpBe^LFlp+WVRx;hp4yu{W))PauiKd}!ejEUgqa^r6r?xR5ZET_siEdGkHPeSMW z;~a#s=FRbX)hQ7|j4xbozXnQrUTjqx1fDc05<_>oy*$$UN?+UQKL@=xIUYH4VsAyg zN9;{jM1#LN&dMHgw=@YwLz0U5Kg}$5`61A+u<}P7n$CX0^#A;)Di{3@@;%7!75ofj zko;U*?61!UIgUrsACVh>YgM-d{&vRa4~xG;+7f}km67gW|4VzCN5AxxDloW6;r~V! zoM~u>CiK;tQ7+&-tZDo6Ve#`HD?fXAowC#Dne|#y?!?!2{E7X&LHc@*>`gj<5tb&W zj=KLx91>&H*CP%^{=_j5X$(eg{Jnh&e}AaYo(TPp89E2wN4%t~2d14h3%sUO-}i{V z>25Q?%@<}e>3VbN9IXG|v{=+)dC>MECwP$k>bv7kJRs4L&4wwqrZ#)5IY!0;5huM`=T4qnaw&Ty0-s|%-M0+b` zZ&Kug@ptowA5@~w6UW<#KN9L2O2_5o#vip)Ua|(Ha}g-Nkl+4qng5Y{c>GSt&p|p; zlw|O(zVRem!?~A@KivPwF1{kfR_y%@>gzeOHz@-7OVo|p{uUvBqK*^w9&t$Q*~Ua@ zTn@)YtiM1s~X^=Ol4xVcbnJ7fY`E32oJDfu`z2$O=CS(OdRG>qiC# zoAyCk$otS(77e{U*7iZOvGu; z6OW@DMF~N{;kH?ozq47lerG$AKUd}6yQidem9(ak*7TB&OK=?bmBaxB--O2ET+Bc4 zX8&)zw6UDaX~$pRc!rHV7xq@vdv@%FB6}xXvp1{kcQ!9h&xpTl;t$vL+RZy48|z~3 z%V6<8&Y$PkvyUaucKqR38jWYT@-qhLy*`~cX&CIy`to-+^Naf|;4eig8-Jt&rE{-n z4xnTnD)k4&*dN7ahO)n&&OhYX4l%gj;7Z(oa8ZF7mSf%_$Ird>_w+?^s`83@r{&Ql zrNELc8t>0PCI4eM>^ZZy4tj4^HQHOUxv2AIm7?^qH}mFwHd}j}iFpkurvceuaqge9 zKA`9mQ+#kJ{=C(`+l$&@!fLe;3l#m1nMd*m#Q3IfDG>H%$Z7QKenS-VbG83Mye=E} zA8hgd`~%{zFSa*H>Ss`Yug}l0v$tYjPs*O8ujh=tnfdqGOv8P)wd^OAm{-Hr2keWr zxSIPXSN=9$uERCu1NR+t#$Vj6pM^Ngs~57I>Y}m!{mhQ70uthHTBuHVExt#`84)Eg z_r<@d49bJvAO9u(u)im;hcRV}>kY8Cj(!HQ=fux&$(|nh%SF+d*|p#P*JU42mfY+7#mFR8i%_w}{TK{$f@ERA@cPJve(tY5#B7KCV>fIrz8(*z41IGyB+^k@E|iapM;@ zKQw^}J_y=iG0rEZo|g0h<;LIA!y17n#pk80SF(p6*M9Mb#P@rPp?p+)6_ z42UT^*jzEDJiy*M(|c%d1)V2hZ@TVhHvRLT+16ye$}SElU4Mjq!0$Rb7zxE;8slxsX>I1SWev zvH$(Js~pa*YsVjsrKLAEp)}i%XNc?#)z_1-IgbX*593->S(ePA&TBaK6+ zXJ-S69Qk|Y6RZ6_ku`AtBWL};6=7)te?i*sJgWZ!75OaorRS9m887$mHH~Y48!}%3 zEzbW7ykPKXd88cL@rSWJ8-HSa#l={fQ@w|=6-PhAmEN14@-v&3Y+=(h7Pjg7e+hY> zZTyiBLTfNl|JnG%ISF#pf1&3S1)ipcwX&>^ejVaW|Lw?YvH8ks%#SZ^19!jPyf;C4 z@9Tm4G|_#d&+LWGdt+r0e<7PI@;B62nytSl)p^eR4Agtmuc58Q{vO#|(s@$$rX^a~ z^iRHLnt%Of9Se5o1B(1n97b;Z^`LLLCd3+lq1;w8E;PU%W0%0>bc{dKc*t5D5Al7= zfH6XAF7j;=de+<1`!uCTnqy zR-18nYlU64*J$3?oex$<)?+UufiYI zC~y^QI&ZM}3UTM6uji=uh`VXAC^7fgG<63%piW?AI3KIzr=L_bFOcS@7M7GiMotdM zQU8f7P;Q~KI;&q1BJ z3y$Mngiq|u1$tk-?-j3FJO$-xXP~(*Uf74h@m$aT-2<05&w%>{m9~8c$@l$~ zeBn3dAba*}20U3dJN`y7mNpz8cX~4V8t7+GU$37%WRCP+AA8f_9-FGT%QnUR&EP%TJ6@&76V3Q!Ec zDFbqUQ*I;4?on<1lg=@Q<7}e{-As-^N#YZYewaE-8aerElI6%+h;@1 zzaLGT@bAcnzvDOu;da|^irX#!R#cLh?kfI{QuIxmqUd&uBA=wvq{t)r`!|XkBt^Fs z>G_p{=<@!q(30FJQhb`8FGzwePeF1?dqZ*Q({zQJBtfT8qMW~^Rh(CUs)!&_CMZsm zoWGusCPXp1X5a_9KB&+c3nkY@5YgWJM%%G}6x z7=Q7;9+uV}fBj(mC8KR6riim?7-NYIIt-@ji_l@t2g+66-eSPDZw&5VD`m9zC7tK9 zThFxhp4Ec|1;(h0T!A8XFqELn3!;A!QVjA7}&rG4{H0dvDTyPhZC ztMBd+<{}uqIQQ9;&-<|6E8}`4=2*MVo{DV%bC2`i73~o+=R&oxPWXe^n|5pEJW($@ zBXZbtFZS<$8C`6KCF^v;y38f(K2t{K4KIJSC(6q2;hZ67^|A}cGZyKaz(33&*kRwj zW$f{F>EQEvDfsOuhe@xNz=Y?uxJO97@VVcC>umbD67WA%4SsJ|fZs0X;_O}z^4|VP zowBv^hRx^M6n;~6edkileYzhKcR$Gj&i>VF`8OWqxgPcJk}u&78S8otJa$Que$~21 zNpgN8(7N*~+`@|PlbxQ7`>&>ZZU5D=e%43ndRq?NVD6Byu0!1=r9!FE3B0`$n!?oY zzGTyPx-32BfBDL5^Y6#{S^4#bZ@)cNR}IOhR13HNLp3EJ3p54yqf*c9v-v-VA^=*7 zxc>80TRe*Q=`f~(dchP%^IziE&$O{eby4)!?^K^3+G^_?K8p3jpILr7lefwEZWG#P z^*vJ;tgh*RAoP=6#b$UrkMDN&RQuK7+~&z!_3%<@o3MxPVD}Bc{XV7~FxmOWv_5!w zym!{WQT`3TS2AJZbTymtbed|$;(;>Q^YG8S{~Ot_DH6syXpLo0m+RcRhjN-R&g^z3+d`}e&9?zQ4W5O(R2LtKHPs6<9(qytuFiOO*sDH zf9zX9@6AC@^J7ne*?1KiO4V@oBfaoG%~wrt@a#OOlb?R0$c{hmaqc;9qvy@B?w(dy zxeASOox5dwT%o`yaax#_X4l?5mNwXU*2>_EXHxAxbG+AB|81fy^c=VoQ{S1%# z^`;)Mji2|6qY<2ty-7U2t^$hXvcm+ zhl9Ag{`mDDjQtt=t$D6eik$Pe?5I_@Jr_>7C7tK9D62OK{87GqPqqimd8WC~lyk$C zc(OeFUL$8w+-rJ!^guh7-`0b3Ty6^bF*q{bsqUjXH&luIc{cxUMeIBnN;nfEXTp

)5BK!J8sEJAQ8FXTt*?*UH&jreJ)zRWQ#uuxv5w0;4^Y(hO?EGHxW@|X@(^69b z{>T?GIOV|iZ0dHRF=SrTr{2N6^^nt0{augp zSB8xFEsGQKkBj|3Lw>%%oaVw|b}sj>Z9W!f%Ck(3w7$zzFTw%Lx$A>_C=g5A59ctw z;uJ{tpK*507W6m$_LmCZxe#xii|6b-cf7Z5Um`OGZBRDmY{VRx6;ObAoJ9WaTg*(E z_isM`bezRzdU5Zdk>qji>1qN~)dfK)Z?ro&b9K#Q36+YZ=+m})O8HAlN(60Q9iM+X z&iHfH)^dFR{!cAY>XdY+{2e_P4L1_hT>o+YY82|58yukghH2KbjY_ zWx_^KXdN9!JT+d9)ITii7a^I$m7qPKW}g+-jm0lIe#Jx-Z=93Gw076+==((@n_DT z$bz?yJpRlX^cH*KxUaYF&+q$av!D9a{is&cw;rAI%9(q#nUl8v$NRS{b+_(t{`edh zuZ;CyIlLKG2mheV;QJqWrT(S5;8A?Nw7>)#{yR+-c=F$h33JroyD0GCIh63W@Jw6qdgk@a8SpFvhpSql1oOT)tM~Wo+99&B-RWn}&gbuWw(TB< z`VQ07Ds`WH;MD)kPf@Vr+8>k;!*lXykmqkBC_<~asEBl`<6_|gP<)WLojlv_VQ3dE z?mtucqx0M#VaixgN1W#CFL`XxseT#@{>x&Is}}D5t8M+Ic+Kjr9(eljE!FjN@ACDR zoIkhmXD*F}-%g)Y1fKp);k(Gp9-p5GeowWsCC?`)|9D_e%rEP`srez^SEt% zv~8n1+JF0rIA+YP9T3;sh&lQx2O#Z7Q&&(KwRCf)Qd`60&+cf0NBNq;=XJ^q%>}!d zb8K!s?mb-@Wr|(Te(mkX+#C52y>+qbPr2RP|K;|7OzmLMX|3X(`8zxQUO5uSbRjP* zdwcrzo%w46JAb2%$NxBgW6Ga8B0^F5{XH9hCFX7jJeIGh)TwOmk$r%R7kU0k&fb`^ zM_i?yeMhzAXql=8W6YH2Z(h*nEFJrNU8VxNdsW`K$1E*B@$om#pdA+v+IMZtjDSxM z1SOlAe2eLTQVdC>dw?{lBJ!*mhyf~G<4j;YXE9WsDD zV&wk1bu4@5i%vh|3~`1y1DpZQ0B3+Rz!~5Sa0WO7oB_@NXMi)n8Q=_X1~>zp0nPwt ufHS}u;0$mEI0Kvk&H!hCGr$?(3~&ZG1DpZQ0B3+Rz!~5Sa0cAP!2btM5s{|= literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation6.hdr.json b/autotests/read/hdr/orientation6.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation6.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation7.hdr b/autotests/read/hdr/orientation7.hdr new file mode 100644 index 0000000000000000000000000000000000000000..204c345f3da58514718c02761538ce16d035f06e GIT binary patch literal 307263 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 literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation7.hdr.json b/autotests/read/hdr/orientation7.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation7.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation8.hdr b/autotests/read/hdr/orientation8.hdr new file mode 100644 index 0000000000000000000000000000000000000000..fa1e5f68d429dca99ec403552b0ee0b0b7fc19c2 GIT binary patch literal 307263 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 literal 0 HcmV?d00001 diff --git a/autotests/read/hdr/orientation8.hdr.json b/autotests/read/hdr/orientation8.hdr.json new file mode 100644 index 0000000..c052e86 --- /dev/null +++ b/autotests/read/hdr/orientation8.hdr.json @@ -0,0 +1,5 @@ +[ + { + "fileName" : "orientation_all.png" + } +] diff --git a/autotests/read/hdr/orientation_all.png b/autotests/read/hdr/orientation_all.png new file mode 100644 index 0000000000000000000000000000000000000000..de135feb8a915d9a4f10eac2a831aac66da726ac GIT binary patch literal 32296 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 literal 0 HcmV?d00001 diff --git a/autotests/read/pfm/testcard_gray.png b/autotests/read/pfm/testcard_gray.png index 3da44c632f997133016892b5fb513d7f8d8b3424..8997b93f6c4d7741065bd1ae6c314736bf0954e5 100644 GIT binary patch literal 17634 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 diff --git a/autotests/readtest.cpp b/autotests/readtest.cpp index de62219..a92dca2 100644 --- a/autotests/readtest.cpp +++ b/autotests/readtest.cpp @@ -177,7 +177,8 @@ public: { bool ok = true; if (!m_size.isEmpty()) { - ok = ok && (m_size == image.size()); + // Size option return the size without transformation (tested with Qt TIFF plugin). + ok = ok && (m_size == image.size() || m_size == image.size().transposed()); } if (m_format != QImage::Format_Invalid) { ok = ok && (m_format == image.format()); diff --git a/src/imageformats/exr.cpp b/src/imageformats/exr.cpp index f1ff045..6afe0ee 100644 --- a/src/imageformats/exr.cpp +++ b/src/imageformats/exr.cpp @@ -7,20 +7,11 @@ SPDX-License-Identifier: LGPL-2.0-or-later */ -/* *** EXR_USE_LEGACY_CONVERSIONS *** - * If defined, the result image is an 8-bit RGB(A) converted - * without icc profiles. Otherwise, a 16-bit images is generated. - * NOTE: The use of legacy conversions are discouraged due to - * imprecise image result. - */ -//#define EXR_USE_LEGACY_CONVERSIONS // default commented -> you should define it in your cmake file - /* *** EXR_CONVERT_TO_SRGB *** * If defined, the linear data is converted to sRGB on read to accommodate * programs that do not support color profiles. * Otherwise the data are kept as is and it is the display program that * must convert to the monitor profile. - * NOTE: If EXR_USE_LEGACY_CONVERSIONS is active, this is ignored. */ //#define EXR_CONVERT_TO_SRGB // default: commented -> you should define it in your cmake file @@ -92,18 +83,6 @@ #include #include -// Allow the code to works on all QT versions supported by KDE -// project (Qt 5.15 and Qt 6.x) to easy backports fixes. -#if !defined(EXR_USE_LEGACY_CONVERSIONS) -// If uncommented, the image is rendered in a float16 format, the result is very precise -#define EXR_USE_QT6_FLOAT_IMAGE // default uncommented -#endif - -// Qt 6.8 allow to create and use Gray profile, so we can load a Gray image as Grayscale format instead RGB one. -#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) -#define EXR_GRAY_SUPPORT_ENABLED -#endif - class K_IStream : public Imf::IStream { public: @@ -214,22 +193,6 @@ void K_OStream::seekg(Imf::Int64 pos) m_dev->seek(pos); } -#ifdef EXR_USE_LEGACY_CONVERSIONS -// source: https://openexr.com/en/latest/ReadingAndWritingImageFiles.html -inline unsigned char gamma(float x) -{ - x = std::pow(5.5555f * std::max(0.f, x), 0.4545f) * 84.66f; - return (unsigned char)qBound(0.f, x, 255.f); -} -inline QRgb RgbaToQrgba(struct Imf::Rgba &imagePixel) -{ - return qRgba(gamma(float(imagePixel.r)), - gamma(float(imagePixel.g)), - gamma(float(imagePixel.b)), - (unsigned char)(qBound(0.f, imagePixel.a * 255.f, 255.f) + 0.5f)); -} -#endif - EXRHandler::EXRHandler() : m_compressionRatio(-1) , m_quality(-1) @@ -253,18 +216,7 @@ bool EXRHandler::canRead() const static QImage::Format imageFormat(const Imf::RgbaInputFile &file) { auto isRgba = file.channels() & Imf::RgbaChannels::WRITE_A; -#ifdef EXR_GRAY_SUPPORT_ENABLED - auto isGray = file.channels() & Imf::RgbaChannels::WRITE_Y; -#else - auto isGray = false; -#endif -#if defined(EXR_USE_LEGACY_CONVERSIONS) - return (isRgba ? QImage::Format_ARGB32 : QImage::Format_RGB32); -#elif defined(EXR_USE_QT6_FLOAT_IMAGE) - return (isRgba ? QImage::Format_RGBA16FPx4 : isGray ? QImage::Format_Grayscale16 : QImage::Format_RGBX16FPx4); -#else - return (isRgba ? QImage::Format_RGBA64 : QImage::Format_RGBX64); -#endif + return (isRgba ? QImage::Format_RGBA16FPx4 : QImage::Format_RGBX16FPx4); } /*! @@ -371,8 +323,6 @@ static void readMetadata(const Imf::Header &header, QImage &image) static void readColorSpace(const Imf::Header &header, QImage &image) { // final color operations -#ifndef EXR_USE_LEGACY_CONVERSIONS - QColorSpace cs; if (auto chroma = header.findTypedAttribute("chromaticities")) { auto &&v = chroma->value(); @@ -383,24 +333,13 @@ static void readColorSpace(const Imf::Header &header, QImage &image) QColorSpace::TransferFunction::Linear); } if (!cs.isValid()) { -#ifdef EXR_GRAY_SUPPORT_ENABLED - if (image.format() == QImage::Format_Grayscale16 || image.format() == QImage::Format_Grayscale8) { - cs = QColorSpace(QPointF(0.31271, 0.32902), QColorSpace::TransferFunction::Linear); - cs.setDescription(QStringLiteral("Gray Linear build-in")); - } else { - cs = QColorSpace(QColorSpace::SRgbLinear); - } -#else cs = QColorSpace(QColorSpace::SRgbLinear); -#endif } image.setColorSpace(cs); #ifdef EXR_CONVERT_TO_SRGB image.convertToColorSpace(QColorSpace(QColorSpace::SRgb)); #endif - -#endif // !EXR_USE_LEGACY_CONVERSIONS } bool EXRHandler::read(QImage *outImage) @@ -451,7 +390,6 @@ bool EXRHandler::read(QImage *outImage) pixels.resizeErase(EXR_LINES_PER_BLOCK, width); bool isRgba = image.hasAlphaChannel(); - // somehow copy pixels into image for (int y = 0, n = 0; y < height; y += n) { auto my = dw.min.y + y; if (my > dw.max.y) { // paranoia check @@ -462,37 +400,14 @@ bool EXRHandler::read(QImage *outImage) file.readPixels(my, std::min(my + EXR_LINES_PER_BLOCK - 1, dw.max.y)); for (n = 0; n < std::min(EXR_LINES_PER_BLOCK, height - y); ++n) { - if (image.format() == QImage::Format_Grayscale16) { // grayscale image - auto scanLine = reinterpret_cast(image.scanLine(y + n)); - for (int x = 0; x < width; ++x) { - *(scanLine + x) = quint16(qBound(0.f, float(pixels[n][x].r) * 65535.f + 0.5f, 65535.f)); - } - continue; - } -#if defined(EXR_USE_LEGACY_CONVERSIONS) - Q_UNUSED(isRgba) - auto scanLine = reinterpret_cast(image.scanLine(y + n)); - for (int x = 0; x < width; ++x) { - *(scanLine + x) = RgbaToQrgba(pixels[n][x]); - } -#elif defined(EXR_USE_QT6_FLOAT_IMAGE) auto scanLine = reinterpret_cast(image.scanLine(y + n)); for (int x = 0; x < width; ++x) { auto xcs = x * 4; - *(scanLine + xcs) = qfloat16(qBound(0.f, float(pixels[n][x].r), 1.f)); - *(scanLine + xcs + 1) = qfloat16(qBound(0.f, float(pixels[n][x].g), 1.f)); - *(scanLine + xcs + 2) = qfloat16(qBound(0.f, float(pixels[n][x].b), 1.f)); - *(scanLine + xcs + 3) = qfloat16(isRgba ? qBound(0.f, float(pixels[n][x].a), 1.f) : 1.f); + *(scanLine + xcs) = qfloat16(float(pixels[n][x].r)); + *(scanLine + xcs + 1) = qfloat16(float(pixels[n][x].g)); + *(scanLine + xcs + 2) = qfloat16(float(pixels[n][x].b)); + *(scanLine + xcs + 3) = qfloat16(isRgba ? std::clamp(float(pixels[n][x].a), 0.f, 1.f) : 1.f); } -#else - auto scanLine = reinterpret_cast(image.scanLine(y + n)); - for (int x = 0; x < width; ++x) { - *(scanLine + x) = QRgba64::fromRgba64(quint16(qBound(0.f, float(pixels[n][x].r) * 65535.f + 0.5f, 65535.f)), - quint16(qBound(0.f, float(pixels[n][x].g) * 65535.f + 0.5f, 65535.f)), - quint16(qBound(0.f, float(pixels[n][x].b) * 65535.f + 0.5f, 65535.f)), - isRgba ? quint16(qBound(0.f, float(pixels[n][x].a) * 65535.f + 0.5f, 65535.f)) : quint16(65535)); - } -#endif } } @@ -659,26 +574,12 @@ bool EXRHandler::write(const QImage &image) pixels.resizeErase(EXR_LINES_PER_BLOCK, width); // convert the image and write into the stream -#if defined(EXR_USE_QT6_FLOAT_IMAGE) auto convFormat = image.hasAlphaChannel() ? QImage::Format_RGBA16FPx4 : QImage::Format_RGBX16FPx4; -#else - auto convFormat = image.hasAlphaChannel() ? QImage::Format_RGBA64 : QImage::Format_RGBX64; -#endif ScanLineConverter slc(convFormat); -#ifdef EXR_GRAY_SUPPORT_ENABLED - if (channelsType == Imf::RgbaChannels::WRITE_Y) { - slc.setDefaultSourceColorSpace(QColorSpace(QColorSpace(QColorSpace::SRgb).whitePoint(), QColorSpace::TransferFunction::SRgb)); // Creates a custom grayscale color space - } else { - slc.setDefaultSourceColorSpace(QColorSpace(QColorSpace::SRgb)); - } -#else slc.setDefaultSourceColorSpace(QColorSpace(QColorSpace::SRgb)); -#endif - slc.setTargetColorSpace(QColorSpace(QColorSpace::SRgbLinear)); for (int y = 0, n = 0; y < height; y += n) { for (n = 0; n < std::min(EXR_LINES_PER_BLOCK, height - y); ++n) { -#if defined(EXR_USE_QT6_FLOAT_IMAGE) auto scanLine = reinterpret_cast(slc.convertedScanLine(image, y + n)); if (scanLine == nullptr) { return false; @@ -690,18 +591,6 @@ bool EXRHandler::write(const QImage &image) pixels[n][x].b = float(*(scanLine + xcs + 2)); pixels[n][x].a = float(*(scanLine + xcs + 3)); } -#else - auto scanLine = reinterpret_cast(slc.convertedScanLine(image, y + n)); - if (scanLine == nullptr) { - return false; - } - for (int x = 0; x < width; ++x) { - pixels[n][x].r = float((scanLine + x)->red() / 65535.f); - pixels[n][x].g = float((scanLine + x)->green() / 65535.f); - pixels[n][x].b = float((scanLine + x)->blue() / 65535.f); - pixels[n][x].a = float((scanLine + x)->alpha() / 65535.f); - } -#endif } file.setFrameBuffer(&pixels[0][0] - qint64(y) * width, 1, width); file.writePixels(n); diff --git a/src/imageformats/hdr.cpp b/src/imageformats/hdr.cpp index 0db702a..bee4fdc 100644 --- a/src/imageformats/hdr.cpp +++ b/src/imageformats/hdr.cpp @@ -27,12 +27,194 @@ typedef unsigned char uchar; Q_LOGGING_CATEGORY(HDRPLUGIN, "kf.imageformats.plugins.hdr", QtWarningMsg) -namespace // Private. -{ #define MAXLINE 1024 #define MINELEN 8 // minimum scanline length for encoding #define MAXELEN 0x7fff // maximum scanline length for encoding +class Header +{ +public: + Header() + { + m_colorSpace = QColorSpace(QColorSpace::SRgbLinear); + m_transformation = QImageIOHandler::TransformationNone; + } + Header(const Header&) = default; + Header& operator=(const Header&) = default; + + bool isValid() const { return width() > 0 && height() > 0; } + qint32 width() const { return(m_size.width()); } + qint32 height() const { return(m_size.height()); } + QString software() const { return(m_software); } + QImageIOHandler::Transformations transformation() const { return(m_transformation); } + + /*! + * \brief colorSpace + * + * The color space for the image. + * + * The CIE (x,y) chromaticity coordinates of the three (RGB) + * primaries and the white point used to standardize the picture's + * color system. This is used mainly by the ra_xyze program to + * convert between color systems. If no PRIMARIES line + * appears, we assume the standard primaries defined in + * src/common/color.h, namely "0.640 0.330 0.290 + * 0.600 0.150 0.060 0.333 0.333" for red, green, blue + * and white, respectively. + */ + QColorSpace colorSpace() const { return(m_colorSpace); } + + /*! + * \brief exposure + * + * A single floating point number indicating a multiplier that has + * been applied to all the pixels in the file. EXPOSURE values are + * cumulative, so the original pixel values (i.e., radiances in + * watts/steradian/m^2) must be derived by taking the values in the + * file and dividing by all the EXPOSURE settings multiplied + * together. No EXPOSURE setting implies that no exposure + * changes have taken place. + */ + float exposure() const { + float mul = 1; + for (auto&& v : m_exposure) + mul *= v; + return mul; + } + + QImageIOHandler::Transformations m_transformation; + QColorSpace m_colorSpace; + QString m_software; + QSize m_size; + QList m_exposure; +}; + +class HDRHandlerPrivate +{ +public: + HDRHandlerPrivate() + { + } + ~HDRHandlerPrivate() + { + } + + const Header& header(QIODevice *device) + { + auto&& h = m_header; + if (h.isValid()) { + return h; + } + h = readHeader(device); + return h; + } + + static Header readHeader(QIODevice *device) + { + Header h; + + int len; + QByteArray line(MAXLINE + 1, Qt::Uninitialized); + QByteArray format; + + // Parse header + do { + len = device->readLine(line.data(), MAXLINE); + + if (line.startsWith("FORMAT=")) { + format = line.mid(7, len - 7).trimmed(); + } + if (line.startsWith("SOFTWARE=")) { + h.m_software = QString::fromUtf8(line.mid(9, len - 9)).trimmed(); + } + if (line.startsWith("EXPOSURE=")) { + auto ok = false; + auto ex = QLocale::c().toFloat(QString::fromLatin1(line.mid(9, len - 9)).trimmed(), &ok); + if (ok) + h.m_exposure << ex; + } + if (line.startsWith("PRIMARIES=")) { + auto list = line.mid(10, len - 10).trimmed().split(' '); + QList primaries; + for (auto&& v : list) { + auto ok = false; + auto d = QLocale::c().toDouble(QString::fromLatin1(v), &ok); + if (ok) + primaries << d; + } + if (primaries.size() == 8) { + auto cs = QColorSpace(QPointF(primaries.at(6), primaries.at(7)), + QPointF(primaries.at(0), primaries.at(1)), + QPointF(primaries.at(2), primaries.at(3)), + QPointF(primaries.at(4), primaries.at(5)), + QColorSpace::TransferFunction::Linear); + cs.setDescription(QStringLiteral("Embedded RGB")); + if (cs.isValid()) + h.m_colorSpace = cs; + } + } + + } while ((len > 0) && (line[0] != '\n')); + + if (format != "32-bit_rle_rgbe") { + qCDebug(HDRPLUGIN) << "Unknown HDR format:" << format; + return h; + } + + len = device->readLine(line.data(), MAXLINE); + line.resize(len); + + /* + * Handle flipping and rotation, as per the spec below. + * The single resolution line consists of 4 values, a X and Y label each followed by a numerical + * integer value. The X and Y are immediately preceded by a sign which can be used to indicate + * flipping, the order of the X and Y indicate rotation. The standard coordinate system for + * Radiance images would have the following resolution string -Y N +X N. This indicates that the + * vertical axis runs down the file and the X axis is to the right (imagining the image as a + * rectangular block of data). A -X would indicate a horizontal flip of the image. A +Y would + * indicate a vertical flip. If the X value appears before the Y value then that indicates that + * the image is stored in column order rather than row order, that is, it is rotated by 90 degrees. + * The reader can convince themselves that the 8 combinations cover all the possible image orientations + * and rotations. + */ + QRegularExpression resolutionRegExp(QStringLiteral("([+\\-][XY])\\s+([0-9]+)\\s+([+\\-][XY])\\s+([0-9]+)\n")); + QRegularExpressionMatch match = resolutionRegExp.match(QString::fromLatin1(line)); + if (!match.hasMatch()) { + qCDebug(HDRPLUGIN) << "Invalid HDR file, the first line after the header didn't have the expected format:" << line; + return h; + } + + auto c0 = match.captured(1); + auto c1 = match.captured(3); + if (c0.at(1) == u'Y') { + if (c0.at(0) == u'-' && c1.at(0) == u'+') + h.m_transformation = QImageIOHandler::TransformationNone; + if (c0.at(0) == u'-' && c1.at(0) == u'-') + h.m_transformation = QImageIOHandler::TransformationMirror; + if (c0.at(0) == u'+' && c1.at(0) == u'+') + h.m_transformation = QImageIOHandler::TransformationFlip; + if (c0.at(0) == u'+' && c1.at(0) == u'-') + h.m_transformation = QImageIOHandler::TransformationRotate180; + } + else { + if (c0.at(0) == u'-' && c1.at(0) == u'+') + h.m_transformation = QImageIOHandler::TransformationRotate90; + if (c0.at(0) == u'-' && c1.at(0) == u'-') + h.m_transformation = QImageIOHandler::TransformationMirrorAndRotate90; + if (c0.at(0) == u'+' && c1.at(0) == u'+') + h.m_transformation = QImageIOHandler::TransformationFlipAndRotate90; + if (c0.at(0) == u'+' && c1.at(0) == u'-') + h.m_transformation = QImageIOHandler::TransformationRotate270; + } + + h.m_size = QSize(match.captured(4).toInt(), match.captured(2).toInt()); + return h; + } + +private: + Header m_header; +}; + // read an old style line from the hdr image file // if 'first' is true the first byte is already read static bool Read_Old_Line(uchar *image, int width, QDataStream &s) @@ -76,9 +258,10 @@ static bool Read_Old_Line(uchar *image, int width, QDataStream &s) } template -void RGBE_To_QRgbLine(uchar *image, float_T *scanline, int width) +void RGBE_To_QRgbLine(uchar *image, float_T *scanline, const Header& h) { - for (int j = 0; j < width; j++) { + auto exposure = h.exposure(); + for (int j = 0, width = h.width(); j < width; j++) { // v = ldexp(1.0, int(image[3]) - 128); float v; int e = qBound(-31, int(image[3]) - 128, 31); @@ -90,9 +273,13 @@ void RGBE_To_QRgbLine(uchar *image, float_T *scanline, int width) auto j4 = j * 4; auto vn = v / 255.0f; - scanline[j4] = float_T(std::min(float(image[0]) * vn, 1.0f)); - scanline[j4 + 1] = float_T(std::min(float(image[1]) * vn, 1.0f)); - scanline[j4 + 2] = float_T(std::min(float(image[2]) * vn, 1.0f)); + if (exposure > 0) { + vn /= exposure; + } + + scanline[j4] = float_T(float(image[0]) * vn); + scanline[j4 + 1] = float_T(float(image[1]) * vn); + scanline[j4 + 2] = float_T(float(image[2]) * vn); scanline[j4 + 3] = float_T(1.0f); image += 4; } @@ -108,11 +295,14 @@ QImage::Format imageFormat() } // Load the HDR image. -static bool LoadHDR(QDataStream &s, const int width, const int height, QImage &img) +static bool LoadHDR(QDataStream &s, const Header& h, QImage &img) { uchar val; uchar code; + const int width = h.width(); + const int height = h.height(); + // Create dst image. img = imageAlloc(width, height, imageFormat()); if (img.isNull()) { @@ -134,7 +324,7 @@ static bool LoadHDR(QDataStream &s, const int width, const int height, QImage &i // determine scanline type if ((width < MINELEN) || (MAXELEN < width)) { Read_Old_Line(image, width, s); - RGBE_To_QRgbLine(image, scanline, width); + RGBE_To_QRgbLine(image, scanline, h); continue; } @@ -147,7 +337,7 @@ static bool LoadHDR(QDataStream &s, const int width, const int height, QImage &i if (val != 2) { s.device()->ungetChar(val); Read_Old_Line(image, width, s); - RGBE_To_QRgbLine(image, scanline, width); + RGBE_To_QRgbLine(image, scanline, h); continue; } @@ -162,7 +352,7 @@ static bool LoadHDR(QDataStream &s, const int width, const int height, QImage &i if ((image[1] != 2) || (image[2] & 128)) { image[0] = 2; Read_Old_Line(image + 4, width - 1, s); - RGBE_To_QRgbLine(image, scanline, width); + RGBE_To_QRgbLine(image, scanline, h); continue; } @@ -204,84 +394,34 @@ static bool LoadHDR(QDataStream &s, const int width, const int height, QImage &i } } } - - RGBE_To_QRgbLine(image, scanline, width); + RGBE_To_QRgbLine(image, scanline, h); } return true; } -static QSize readHeaderSize(QIODevice *device) -{ - int len; - QByteArray line(MAXLINE + 1, Qt::Uninitialized); - QByteArray format; - - // Parse header - do { - len = device->readLine(line.data(), MAXLINE); - - if (line.startsWith("FORMAT=")) { - format = line.mid(7, len - 7 - 1 /*\n*/); - } - - } while ((len > 0) && (line[0] != '\n')); - - if (format != "32-bit_rle_rgbe") { - qCDebug(HDRPLUGIN) << "Unknown HDR format:" << format; - return QSize(); - } - - len = device->readLine(line.data(), MAXLINE); - line.resize(len); - - /* - TODO: handle flipping and rotation, as per the spec below - The single resolution line consists of 4 values, a X and Y label each followed by a numerical - integer value. The X and Y are immediately preceded by a sign which can be used to indicate - flipping, the order of the X and Y indicate rotation. The standard coordinate system for - Radiance images would have the following resolution string -Y N +X N. This indicates that the - vertical axis runs down the file and the X axis is to the right (imagining the image as a - rectangular block of data). A -X would indicate a horizontal flip of the image. A +Y would - indicate a vertical flip. If the X value appears before the Y value then that indicates that - the image is stored in column order rather than row order, that is, it is rotated by 90 degrees. - The reader can convince themselves that the 8 combinations cover all the possible image orientations - and rotations. - */ - QRegularExpression resolutionRegExp(QStringLiteral("([+\\-][XY]) ([0-9]+) ([+\\-][XY]) ([0-9]+)\n")); - QRegularExpressionMatch match = resolutionRegExp.match(QString::fromLatin1(line)); - if (!match.hasMatch()) { - qCDebug(HDRPLUGIN) << "Invalid HDR file, the first line after the header didn't have the expected format:" << line; - return QSize(); - } - - if ((match.captured(1).at(1) != u'Y') || (match.captured(3).at(1) != u'X')) { - qCDebug(HDRPLUGIN) << "Unsupported image orientation in HDR file."; - return QSize(); - } - - return QSize(match.captured(4).toInt(), match.captured(2).toInt()); -} - -} // namespace - bool HDRHandler::read(QImage *outImage) { QDataStream s(device()); - m_imageSize = readHeaderSize(s.device()); - if (!m_imageSize.isValid()) { + const Header& h = d->header(s.device()); + if (!h.isValid()) { return false; } QImage img; - if (!LoadHDR(s, m_imageSize.width(), m_imageSize.height(), img)) { + if (!LoadHDR(s, h, img)) { // qDebug() << "Error loading HDR file."; return false; } - // The images read by Gimp and Photoshop (including those of the tests) are interpreted with linear color space. + // By setting the linear color space, programs that support profiles display HDR files as in GIMP and Photoshop. - img.setColorSpace(QColorSpace(QColorSpace::SRgbLinear)); + img.setColorSpace(h.colorSpace()); + + // Metadata + if (!h.software().isEmpty()) { + img.setText(QStringLiteral(META_KEY_SOFTWARE), h.software()); + } *outImage = img; return true; @@ -295,6 +435,9 @@ bool HDRHandler::supportsOption(ImageOption option) const if (option == QImageIOHandler::ImageFormat) { return true; } + if (option == QImageIOHandler::ImageTransformation) { + return true; + } return false; } @@ -303,15 +446,10 @@ QVariant HDRHandler::option(ImageOption option) const QVariant v; if (option == QImageIOHandler::Size) { - if (!m_imageSize.isEmpty()) { - v = QVariant::fromValue(m_imageSize); - } else if (auto d = device()) { - // transactions works on both random and sequential devices - d->startTransaction(); - auto size = readHeaderSize(d); - d->rollbackTransaction(); - if (size.isValid()) { - v = QVariant::fromValue(size); + if (auto dev = device()) { + auto&& h = d->header(dev); + if (h.isValid()) { + v = QVariant::fromValue(h.m_size); } } } @@ -320,10 +458,21 @@ QVariant HDRHandler::option(ImageOption option) const v = QVariant::fromValue(imageFormat()); } + if (option == QImageIOHandler::ImageTransformation) { + if (auto dev = device()) { + auto&& h = d->header(dev); + if (h.isValid()) { + v = QVariant::fromValue(h.transformation()); + } + } + } + return v; } HDRHandler::HDRHandler() + : QImageIOHandler() + , d(new HDRHandlerPrivate) { } @@ -350,9 +499,9 @@ bool HDRHandler::canRead(QIODevice *device) // allow to load offical test cases: https://radsite.lbl.gov/radiance/framed.html device->startTransaction(); - QSize size = readHeaderSize(device); + auto h = HDRHandlerPrivate::readHeader(device); device->rollbackTransaction(); - if (size.isValid()) { + if (h.isValid()) { return true; } diff --git a/src/imageformats/hdr_p.h b/src/imageformats/hdr_p.h index f0ac600..6f93d64 100644 --- a/src/imageformats/hdr_p.h +++ b/src/imageformats/hdr_p.h @@ -9,7 +9,9 @@ #define KIMG_HDR_P_H #include +#include +class HDRHandlerPrivate; class HDRHandler : public QImageIOHandler { public: @@ -24,11 +26,7 @@ public: static bool canRead(QIODevice *device); private: - /*! - * \brief m_imageSize - * Image size cache used by option() - */ - QSize m_imageSize; + const QScopedPointer d; }; class HDRPlugin : public QImageIOPlugin diff --git a/src/imageformats/jxr.cpp b/src/imageformats/jxr.cpp index 906d8a7..bb6c626 100644 --- a/src/imageformats/jxr.cpp +++ b/src/imageformats/jxr.cpp @@ -436,6 +436,13 @@ public: #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) << QImage::Format_CMYK8888 #endif +#ifndef JXR_DENY_FLOAT_IMAGE + << QImage::Format_RGBA16FPx4 + << QImage::Format_RGBX16FPx4 + << QImage::Format_RGBA32FPx4 + << QImage::Format_RGBA32FPx4_Premultiplied + << QImage::Format_RGBX32FPx4 +#endif // JXR_DENY_FLOAT_IMAGE << QImage::Format_RGBA64 << QImage::Format_RGBA64_Premultiplied << QImage::Format_RGBA8888 @@ -476,7 +483,18 @@ public: } else { qi = qi.convertToFormat(alpha ? QImage::Format_RGBA8888 : QImage::Format_RGB888); } +#ifndef JXR_DENY_FLOAT_IMAGE + } else if(qi.format() == QImage::Format_RGBA16FPx4 || + qi.format() == QImage::Format_RGBX16FPx4 || + qi.format() == QImage::Format_RGBA32FPx4 || + qi.format() == QImage::Format_RGBA32FPx4_Premultiplied || + qi.format() == QImage::Format_RGBX32FPx4) { + auto cs = qi.colorSpace(); + if (cs.isValid() && cs.transferFunction() != QColorSpace::TransferFunction::Linear) { + qi = qi.convertedToColorSpace(QColorSpace(QColorSpace::SRgbLinear)); + } } +#endif // JXR_DENY_FLOAT_IMAGE return qi; } @@ -759,35 +777,6 @@ private: } }; -template -inline T scRGBTosRGB(T f) -{ - // convert from linear scRGB to non-linear sRGB - if (f <= T(0)) { - return T(0); - } - if (f <= T(0.0031308f)) { - return qBound(T(0), f * T(12.92f), T(1)); - } - if (f < T(1)) { - return qBound(T(0), T(1.055f) * T(pow(f, T(1.0) / T(2.4))) - T(0.055), T(1)); - } - return T(1); -} - -template -inline T alpha_scRGBTosRGB(T f) -{ - // alpha is converted differently than RGB in scRGB - if (f <= T(0)) { - return T(0); - } - if (f < T(1.0)) { - return T(f); - } - return T(1); -} - bool JXRHandler::read(QImage *outImage) { if (!d->initForReading(device())) { @@ -841,13 +830,11 @@ bool JXRHandler::read(QImage *outImage) } else { // additional buffer needed qint64 convStrideSize = (img.width() * d->pDecoder->WMP.wmiI.cBitsPerUnit + 7) / 8; qint64 buffSize = convStrideSize * img.height(); -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) qint64 limit = QImageReader::allocationLimit(); if (limit && (buffSize + img.sizeInBytes()) > limit * 1024 * 1024) { qCWarning(LOG_JXRPLUGIN) << "JXRHandler::read() unable to covert due to allocation limit set:" << limit << "MiB"; return false; } -#endif QVector ba(buffSize); if (auto err = pConverter->Copy(pConverter, &rect, ba.data(), convStrideSize)) { PKFormatConverter_Release(&pConverter); @@ -866,34 +853,24 @@ bool JXRHandler::read(QImage *outImage) d->setTextMetadata(img); #ifndef JXR_DENY_FLOAT_IMAGE - // JXR float are stored in scRGB -> range -0,5 to 7,5 (source Wikipedia) - if (img.format() == QImage::Format_RGBX16FPx4 || img.format() == QImage::Format_RGBA16FPx4 || img.format() == QImage::Format_RGBA16FPx4_Premultiplied) { + // JXR float are stored in scRGB. + if (img.format() == QImage::Format_RGBX16FPx4 || img.format() == QImage::Format_RGBA16FPx4 || img.format() == QImage::Format_RGBA16FPx4_Premultiplied || + img.format() == QImage::Format_RGBX32FPx4 || img.format() == QImage::Format_RGBA32FPx4 || img.format() == QImage::Format_RGBA32FPx4_Premultiplied) { auto hasAlpha = img.hasAlphaChannel(); for (qint32 y = 0, h = img.height(); y < h; ++y) { - qfloat16 *line = reinterpret_cast(img.scanLine(y)); - for (int x = 0, w = img.width(); x < w; ++x) { - const auto x4 = x * 4; - line[x4 + 0] = scRGBTosRGB(line[x4 + 0]); - line[x4 + 1] = scRGBTosRGB(line[x4 + 1]); - line[x4 + 2] = scRGBTosRGB(line[x4 + 2]); - line[x4 + 3] = hasAlpha ? alpha_scRGBTosRGB(line[x4 + 3]) : qfloat16(1); + if (img.depth() == 64) { + auto line = reinterpret_cast(img.scanLine(y)); + for (int x = 0, w = img.width() * 4; x < w; x += 4) + line[x + 3] = hasAlpha ? std::clamp(line[x + 3], qfloat16(0), qfloat16(1)) : qfloat16(1); + } else { + auto line = reinterpret_cast(img.scanLine(y)); + for (int x = 0, w = img.width() * 4; x < w; x += 4) + line[x + 3] = hasAlpha ? std::clamp(line[x + 3], float(0), float(1)) : float(1); } } - img.setColorSpace(QColorSpace(QColorSpace::SRgb)); - } else if (img.format() == QImage::Format_RGBX32FPx4 || img.format() == QImage::Format_RGBA32FPx4 - || img.format() == QImage::Format_RGBA32FPx4_Premultiplied) { - auto hasAlpha = img.hasAlphaChannel(); - for (qint32 y = 0, h = img.height(); y < h; ++y) { - float *line = reinterpret_cast(img.scanLine(y)); - for (int x = 0, w = img.width(); x < w; ++x) { - const auto x4 = x * 4; - line[x4 + 0] = scRGBTosRGB(line[x4 + 0]); - line[x4 + 1] = scRGBTosRGB(line[x4 + 1]); - line[x4 + 2] = scRGBTosRGB(line[x4 + 2]); - line[x4 + 3] = hasAlpha ? alpha_scRGBTosRGB(line[x4 + 3]) : float(1); - } + if(!img.colorSpace().isValid()) { + img.setColorSpace(QColorSpace(QColorSpace::SRgbLinear)); } - img.setColorSpace(QColorSpace(QColorSpace::SRgb)); } #endif @@ -922,19 +899,11 @@ bool JXRHandler::write(const QImage &image) #ifndef JXR_DISABLE_BGRA_HACK if (IsEqualGUID(jxlfmt, GUID_PKPixelFormat32bppRGBA)) { jxlfmt = GUID_PKPixelFormat32bppBGRA; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - qi = qi.rgbSwapped(); -#else qi.rgbSwap(); -#endif } if (IsEqualGUID(jxlfmt, GUID_PKPixelFormat32bppPRGBA)) { jxlfmt = GUID_PKPixelFormat32bppPBGRA; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - qi = qi.rgbSwapped(); -#else qi.rgbSwap(); -#endif } #endif @@ -968,7 +937,7 @@ bool JXRHandler::write(const QImage &image) } // setting metadata (a failure of setting metadata doesn't stop the encoding) - auto cs = image.colorSpace().iccProfile(); + auto cs = qi.colorSpace().iccProfile(); if (!cs.isEmpty()) { if (auto err = d->pEncoder->SetColorContext(d->pEncoder, reinterpret_cast(cs.data()), cs.size())) { qCWarning(LOG_JXRPLUGIN) << "JXRHandler::write() error while setting ICC profile:" << err; @@ -1043,28 +1012,28 @@ QVariant JXRHandler::option(ImageOption option) const if (d->initForReading(device())) { switch (d->pDecoder->WMP.oOrientationFromContainer) { case O_FLIPV: - v = QImageIOHandler::TransformationFlip; + v = int(QImageIOHandler::TransformationFlip); break; case O_FLIPH: - v = QImageIOHandler::TransformationMirror; + v = int(QImageIOHandler::TransformationMirror); break; case O_FLIPVH: - v = QImageIOHandler::TransformationRotate180; + v = int(QImageIOHandler::TransformationRotate180); break; case O_RCW: - v = QImageIOHandler::TransformationRotate90; + v = int(QImageIOHandler::TransformationRotate90); break; case O_RCW_FLIPV: - v = QImageIOHandler::TransformationFlipAndRotate90; + v = int(QImageIOHandler::TransformationFlipAndRotate90); break; case O_RCW_FLIPH: - v = QImageIOHandler::TransformationMirrorAndRotate90; + v = int(QImageIOHandler::TransformationMirrorAndRotate90); break; case O_RCW_FLIPVH: - v = QImageIOHandler::TransformationRotate270; + v = int(QImageIOHandler::TransformationRotate270); break; default: - v = QImageIOHandler::TransformationNone; + v = int(QImageIOHandler::TransformationNone); break; } } diff --git a/src/imageformats/pfm.cpp b/src/imageformats/pfm.cpp index 5c462f0..0a5111d 100644 --- a/src/imageformats/pfm.cpp +++ b/src/imageformats/pfm.cpp @@ -109,7 +109,7 @@ public: QImage::Format format() const { if (isValid()) { - return isBlackAndWhite() ? QImage::Format_Grayscale16 : QImage::Format_RGBX32FPx4; + return QImage::Format_RGBX32FPx4; } return QImage::Format_Invalid; } @@ -155,7 +155,7 @@ public: d->rollbackTransaction(); return ok; } -} ; +}; class PFMHandlerPrivate { @@ -215,42 +215,26 @@ bool PFMHandler::read(QImage *image) } for (auto y = 0, h = img.height(); y < h; ++y) { - float f; - if (header.isBlackAndWhite()) { - auto line = reinterpret_cast(img.scanLine(header.isPhotoshop() ? y : h - y - 1)); - for (auto x = 0, w = img.width(); x < w; ++x) { - s >> f; - // QColorSpace does not handle gray linear profile, so I have to convert to non-linear - f = f < 0.0031308f ? (f * 12.92f) : (1.055 * std::pow(f, 1.0 / 2.4) - 0.055); - line[x] = quint16(std::clamp(f, float(0), float(1)) * std::numeric_limits::max() + float(0.5)); - - if (s.status() != QDataStream::Ok) { - qCWarning(LOG_PFMPLUGIN) << "PFMHandler::read() detected corrupted data"; - return false; - } + auto bw = header.isBlackAndWhite(); + auto line = reinterpret_cast(img.scanLine(header.isPhotoshop() ? y : h - y - 1)); + for (auto x = 0, n = img.width() * 4; x < n; x += 4) { + line[x + 3] = float(1); + s >> line[x]; + if (bw) { + line[x + 1] = line[x]; + line[x + 2] = line[x]; + } else { + s >> line[x + 1]; + s >> line[x + 2]; } - } else { - auto line = reinterpret_cast(img.scanLine(header.isPhotoshop() ? y : h - y - 1)); - for (auto x = 0, n = img.width() * 4; x < n; x += 4) { - s >> f; - line[x] = std::clamp(f, float(0), float(1)); - s >> f; - line[x + 1] = std::clamp(f, float(0), float(1)); - s >> f; - line[x + 2] = std::clamp(f, float(0), float(1)); - line[x + 3] = float(1); - - if (s.status() != QDataStream::Ok) { - qCWarning(LOG_PFMPLUGIN) << "PFMHandler::read() detected corrupted data"; - return false; - } + if (s.status() != QDataStream::Ok) { + qCWarning(LOG_PFMPLUGIN) << "PFMHandler::read() detected corrupted data"; + return false; } } } - if (!header.isBlackAndWhite()) { - img.setColorSpace(QColorSpace(QColorSpace::SRgbLinear)); - } + img.setColorSpace(QColorSpace(QColorSpace::SRgbLinear)); *image = img; return true;