2017-10-16 272 views
0

我导出了一张带有“RommRGB:ISO 22028-2:2013”​​颜色配置文件(在Mac/Affinity Photo中)的JPEG图像并将其放入res/drawable-nodpi。不幸的是,Android Oreo无法正确识别图像。Android奥利奥WideColorGamut/ProPhotoRGB不被识别

... 
BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(getResources(), R.drawable.img_01_rommrgb, opts); 

Log.i(TAG, "ColorSpace = " + opts.outColorSpace.getName()); // ===> ColorSpace = Unknown 

opts.inJustDecodeBounds = false; 
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.img_01_rommrgb, opts); 

ColorSpace colorSpace = b.getColorSpace();   // ===> Unknown 
Bitmap.Config config = b.getConfig();    // ===> ARGB_8888 
... 

我也下载了一个ProPhoto.icc,并尝试过,但我仍然得到一个“未知”的ColorSpace。我也尝试将图像放入res/drawable-widecg-nodpi中,但仍然没有成功。

我认为,正确的行为应该是:

  1. 色彩空间应该被正确识别
  2. 位图应在RGBA_F16加载

也许我用亲和了错误的颜色配置文件照片。我没有进一步的想法。任何帮助表示赞赏。

PS:I reported the issue by google

EDIT1

我创建了一个GitHub的项目来演示该问题: Wide-gamut color test

我想,下面的测试案例是不正确的的Android奥利奥处理:

  • 1-d)Romm RGB
  • 1-E)ProPhoto RGB
  • 2-d)罗姆RGB
  • 2-e)中ProPhoto RGB
  • 3-d)罗姆RGB
  • 3-e)中ProPhoto RGB
  • 4- d)罗姆RGB
  • 4-e)中ProPhoto RGB

回答

0

我不得不与Android奥利奥同样的问题。我将它报告为Google的一个漏洞,他们要求提供一个可以证明问题的示例应用程序。编写应用程序导致我对实际问题的理解。该应用的测试版现已在Google Play上以“彩色空间转换器”的形式提供。

ExifInterface类没有为ProfileDescription定义标签,这使得发现实际问题变得更加困难。当您尝试为使用上面列出的任何标签的文件创建位图时,它会失败,且Color.id等于ColorSpace.MIN_ID。唯一有效的标签是“ROMM RGB ISO 22028-2:2013”​​。在Gimp和exiftool中,该标签显示为Skia图形引擎的“Google Skia”。