Closed boaosady closed 3 years ago
画笔颜色 我是捕捉屏幕像素点获取的颜色值:UIDisplayP3ColorSpace 0.513725 0.0666667 0 1 RGB: 131,17,0 然后传入MLColor 最终保存时:色值变为:
UIDisplayP3ColorSpace 0.513725 0.0666667 0 1
131,17,0
(lldb) po color ▿ MLColor - red : 0.562706 - green : -0.047306634 - blue : -0.05999811 - alpha : 1.0
RGB: 143,0,0 以上负数值,我在系统工具:色彩同步实用工具 匹配后 和以上屏幕捕捉的色差。区别不大. 可以接受。
143,0,0
但是我通过content 转data存文件时,执行到MLColor 第46 行 public func encode(to encoder: Encoder) throws { 转换并存储为本地的文件color为:fffffff1 这个转换函数有误。
public func encode(to encoder: Encoder) throws {
fffffff1
验证后,还是负数导致的问题。希望在16进制转换色值时,加上负数判断。float < 0 ? 0 : float
float < 0 ? 0 : float
感谢作者支持..
这里不是转换函数的问题,MaLiang 默认使用的是 sRGB 色域,由于 P3 色域广度比 sRGB 要高,所以转换可能会出现负数。这个误差应该在从 P3 转到 sRGB 时处理,而不是在颜色编码时丢弃负值。
在将 UIColor 转换为 MLColor 时应该做一次色域转换,这里之前没有考虑到这个问题,我来改一下
已更新 2.9.2,将 UIColor 转为 MLColor 时会转换色域到 sRGB
画笔颜色 我是捕捉屏幕像素点获取的颜色值:
UIDisplayP3ColorSpace 0.513725 0.0666667 0 1
RGB:131,17,0
然后传入MLColor 最终保存时:色值变为:RGB:
143,0,0
以上负数值,我在系统工具:色彩同步实用工具 匹配后 和以上屏幕捕捉的色差。区别不大. 可以接受。但是我通过content 转data存文件时,执行到MLColor 第46 行
public func encode(to encoder: Encoder) throws {
转换并存储为本地的文件color为:fffffff1
这个转换函数有误。验证后,还是负数导致的问题。希望在16进制转换色值时,加上负数判断。
float < 0 ? 0 : float
感谢作者支持..