Harley-xk / MaLiang

iOS painting and drawing library based on Metal. 神笔马良有一支神笔(基于 Metal 的涂鸦绘图库)
MIT License
1.47k stars 208 forks source link

MLColor 颜色只转换问题 #104

Closed boaosady closed 3 years ago

boaosady commented 3 years ago

画笔颜色 我是捕捉屏幕像素点获取的颜色值:UIDisplayP3ColorSpace 0.513725 0.0666667 0 1 RGB: 131,17,0 然后传入MLColor 最终保存时:色值变为:

(lldb) po color
▿ MLColor
  - red : 0.562706
  - green : -0.047306634
  - blue : -0.05999811
  - alpha : 1.0

RGB: 143,0,0 以上负数值,我在系统工具:色彩同步实用工具 匹配后 和以上屏幕捕捉的色差。区别不大. 可以接受。

但是我通过content 转data存文件时,执行到MLColor 第46 行 public func encode(to encoder: Encoder) throws { 转换并存储为本地的文件color为:fffffff1 这个转换函数有误。

验证后,还是负数导致的问题。希望在16进制转换色值时,加上负数判断。float < 0 ? 0 : float

感谢作者支持..

Harley-xk commented 3 years ago

这里不是转换函数的问题,MaLiang 默认使用的是 sRGB 色域,由于 P3 色域广度比 sRGB 要高,所以转换可能会出现负数。这个误差应该在从 P3 转到 sRGB 时处理,而不是在颜色编码时丢弃负值。

Harley-xk commented 3 years ago

在将 UIColor 转换为 MLColor 时应该做一次色域转换,这里之前没有考虑到这个问题,我来改一下

Harley-xk commented 3 years ago

已更新 2.9.2,将 UIColor 转为 MLColor 时会转换色域到 sRGB