我正在尝试使用可用的公式here将XYZ值转换为LAB *。
问题是,当我查看公式时 - 三个变量var_X,var_Y和var_Z的输出始终为1.00。
如果我将值使用到wolfram alpha我实际上得到了(推测)正确的输出(链接中的示例是本问题底部日志中显示的var_Z的输入)。
你能帮我找到我出错的地方吗?
这是我的代码:
-(NSArray*)convertXYZtoLABSpaceWithLABArray:(NSArray*)labArray{
double var_X = [[labArray objectAtIndex:0] doubleValue] / 95.047;
double var_Y = [[labArray objectAtIndex:1] doubleValue] / 100.000;
double var_Z = [[labArray objectAtIndex:2] doubleValue] / 108.883;
NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z);
if ( var_X > 0.008856 ){
var_X = pow(var_X, ( 1/3 ));
}else{
var_X = ( 7.787 * var_X ) + ( 16 / 116 );
}
if ( var_Y > 0.008856 ){
var_Y = pow(var_Y, ( 1/3 ));
}else{
var_Y = ( 7.787 * var_Y ) + ( 16 / 116 );
}
if ( var_Z > 0.008856 ){
var_Z = pow(var_Z, ( 1/3 ));
}else{
var_Z = ( 7.787 * var_Z ) + ( 16 / 116 );
}
NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z);
NSNumber *l,*a,*b;
l = [NSNumber numberWithDouble:( 116 * var_Y ) - 16];
a = [NSNumber numberWithDouble:500 * ( var_X - var_Y )];
b = [NSNumber numberWithDouble:200 * ( var_Y - var_Z )];
return([NSArray arrayWithObjects:l,a,b, nil]);
}
以下是方法中两个对数点处公式的输入/输出:
convertXYZtoLAB... var_X: 0.345393 var_Y: 0.502066 var_Z: 0.308145
convertXYZtoLAB... var_X: 1.000000 var_Y: 1.000000 var_Z: 1.000000
答案 0 :(得分:3)
你可能会得到整数除法而不是浮点除法。尝试使用1.0/3
代替1/3
,等等。1/3
在整数数学中向下舍入为零。