From 6d2123428741b2686f79c566402f3278036c08c5 Mon Sep 17 00:00:00 2001 From: Carlos Ballesteros Velasco Date: Tue, 22 Nov 2022 12:09:18 +0100 Subject: [PATCH] Tests HEIC loading in apple platforms (#917) * Tests HEIC loading in apple platforms * Try to use CGColorSpaceCreateDeviceRGB * It seems that the decoded HEIC image is different on some devices, let's use PSNR instead to be more lax --- .../format/cg/CGNativeImageFormatProvider.kt | 4 ++-- .../com/soywiz/korim/format/HEICTest.kt | 20 ++++++++++++++++++ korim/src/darwinTest/resources/heic.heic | Bin 0 -> 1412 bytes korim/src/darwinTest/resources/heic.heic.png | Bin 0 -> 1323 bytes 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 korim/src/darwinTest/kotlin/com/soywiz/korim/format/HEICTest.kt create mode 100644 korim/src/darwinTest/resources/heic.heic create mode 100644 korim/src/darwinTest/resources/heic.heic.png diff --git a/korim/src/darwinMain/kotlin/com/soywiz/korim/format/cg/CGNativeImageFormatProvider.kt b/korim/src/darwinMain/kotlin/com/soywiz/korim/format/cg/CGNativeImageFormatProvider.kt index 13234a93d6..a17ea23252 100644 --- a/korim/src/darwinMain/kotlin/com/soywiz/korim/format/cg/CGNativeImageFormatProvider.kt +++ b/korim/src/darwinMain/kotlin/com/soywiz/korim/format/cg/CGNativeImageFormatProvider.kt @@ -112,8 +112,8 @@ open class CGNativeImageFormatProvider : CGBaseNativeImageFormatProvider() { } else { //val colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB) - val colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB) - //val colorSpace = CGColorSpaceCreateDeviceRGB() + //val colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB) + val colorSpace = CGColorSpaceCreateDeviceRGB() try { val realPremultiplied = true //val realPremultiplied = premultiplied diff --git a/korim/src/darwinTest/kotlin/com/soywiz/korim/format/HEICTest.kt b/korim/src/darwinTest/kotlin/com/soywiz/korim/format/HEICTest.kt new file mode 100644 index 0000000000..b8713ffd7f --- /dev/null +++ b/korim/src/darwinTest/kotlin/com/soywiz/korim/format/HEICTest.kt @@ -0,0 +1,20 @@ +package com.soywiz.korim.format + +import com.soywiz.korim.bitmap.* +import com.soywiz.korio.async.* +import com.soywiz.korio.file.std.* +import kotlin.test.* + +class HEICTest { + @Test + fun test() = suspendTest { + val heic = resourcesVfs["heic.heic"].readBitmap().toBMP32().premultiplied() + val png = resourcesVfs["heic.heic.png"].readBitmap(PNG.toProps()).toBMP32().premultiplied() + //localVfs("/tmp/heic.heic.png").writeBitmap(heic, PNG) + assertGreaterOrEqual(30.0, Bitmap32.computePsnr(heic, png), message = "PSNR") + } + + fun assertGreaterOrEqual(expected: Double, actual: Double, message: String = "") { + assertTrue("Expected $actual >= $expected : $message") { actual >= expected } + } +} diff --git a/korim/src/darwinTest/resources/heic.heic b/korim/src/darwinTest/resources/heic.heic new file mode 100644 index 0000000000000000000000000000000000000000..71d419bf81ded1748c9478f7ee112112dce90258 GIT binary patch literal 1412 zcmYjO2~ZPP7~aiB667!fas&tnG@_wui-JZ=5fM?FdQ{XPN^q0NLIN=aNmLA2&^iSH z8P0-IoK~U3A&MYW0VUXJ2MFT9r9=%XR8cT6QIYN21hwD1f4~3!_x%roAbX)qA&C@V zCF0TL;{|9zz`4$Q5AU*1%L3_2@@&neS_2$f0&WRFS2A9oJ!G%NWSk}?bUy)aR%;e7&$Z4r9~ zLL!5@Bw!mXSOeID(8c_SnfF011KY&7I1UF|1S~29!&bz#KnJ3a0muwR^~%5=XM(NAYXuIQ=qz)?;?vIU{0w)e`L+X0RFlW}P`n zw}EcEzLxdQ?a<#(PV8x^Z1XxIw7M}q_`#hOgcx6`h@wf8BoTCf*cPt+YLMD|Ahkd!4_-@Of&d3n%>TuB~O7 zP^COz3yx5<}YmrMRb$%R;*! z@>C=Jm!6(UNPS%Gf%S{E9gbcK$_`d&LOHkL@N7HL^`@m0Cc&K(%a6=^WH%I*Rdmj8 zGW#g!AD)I(Xz|+@aeoNM_xQ6jkE=WE8Z8HyZA{8v*!!!3e%JL@nc*R)?&# V&CSitZ#5z~EweQeoo~{S^dI-F7FqxR literal 0 HcmV?d00001 diff --git a/korim/src/darwinTest/resources/heic.heic.png b/korim/src/darwinTest/resources/heic.heic.png new file mode 100644 index 0000000000000000000000000000000000000000..d169933e17f7c79b35fa35778d716f1d1b390040 GIT binary patch literal 1323 zcmV+`1=RY9P)tv5K~6grF5rNdQAs0wlRN zH{=NoiULwl2@XZDR_&mDqu9cXm5w^C=qU5=Ip^lw++1$(F;2_OZ~o`|{@?dMXKoZVNag*Vy$gCPI7pTWa$yUwKNdDeW^(4TCM-1Iz;|B@T- z=Td5N-7^)8zdSE+9rdbecGlN=U++ygyQik?XuEC|GU9m&dWO9!{Oo?w)DwO>%x27T znUW#TG+gyg2h%IwX&92GtD5KwkE!rEI$uAh&k=K4rj(dV)C}^g_hkrvmXhfEDZckr z{N#CstA=DUr^}hFCYPkw@vvN!-k`jR0dK0Z{-fmZEbnU^@}2xP80V!VqL<_yd@H?& zUhiCVx-!tVe?D5O7<19;oQD(DGtujwL1*5@gYwQwZ>9L;v^*PqzB%ZVW^?-GIciN| z9-~K^i>}&vh*d2@P4N3WecM6X1J<0!dYoSxi>h47Qv1YF90qP(78h^uGZ9z@t zO1hIi(+COq3m^z8+o7*Rek<)2;egYE!tJ?eZ*S6l{yVy#;4c3PHPt)lLvv6sZ!_ei zhe-9MV90(m_MpyNg1zq$Ih2!+XarywJ>QA6PYJYVp?3G*Kk$0uZn+S2$??X+% zfpqF{m%&#jn4e{n#2fOV%8tJbbU%dr-Wjg9di;XcJ)?Ld*E6ctK!N~SSiUlUuP z9!V6~gMO~!yj%7lziclKA3w=|>H7xm>2Nnj@p**}rF2K+C7GDdAjN^NP!fzm)g;A% zMpgX{upF#K-X1%Cxi*?|x%gMSlQ=haokFgCKZ@iK&tn-PN4-N|t3D|VwSr*{s#*{{ zLiMNy>s#a)HdK1CqNohvt}{5?H^2$T&)}mkzU11}KY*&{lUVQc!J;%{Vs1;KC$iN( z*&03xPOuB&oF6)oJkvg_H~ZSL-W9{DiU3xW`8Zh>^;lgM=9*o#IuAi^nCUr9_2h;xXkO}^o>YH*xrRGy2B+$OqBecoJkZ hj6K%Q6MMkp@-H#7VFD%|1p)v7002ovPDHLkV1jcCkTd`Q literal 0 HcmV?d00001