Display P3
Display P3 是苹果手机相机使用的一种色域,查看图片信息可以看到, 然而在flutter中 渲染 Display P3格式的图片 bitmap颜色失真,不了解色域的参考下前面HDR相关的文章
失真效果:
修复效果:
原因就是Flutter 直接把Display P3社区的当做sRGB色域的图像处理了,而没有做色域转换
Flutter
Flutter 跟 Native 图片打通,常见有两种方式:bitmap传递 && 外接纹理,这边文章针对的是前者,外接纹理也会有这种问题的,无非就是pixelBuffer 转纹理,pixelBuffer一样也是有色域问题的,解决方案可以参考 Flutter HDR,原理是一样的。
针对图片的bitmap做色域转换,方案有很多,这里列出常见的两种:
ImageIO
1 | CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL); |
核心就是这个属性,很好理解吧
1 | /* Create an image using a colorspace, that has is compatible with older devices |
重新Render一张图
1 | CGImageSourceRef src = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL); |
从代码量跟性能考量,无脑选前者 😝