【发布时间】:2013-08-20 13:55:49
【问题描述】:
我想使用此代码生成 RGB 到 CMYK 值
pixel = temp.getPixel(i,j);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
K = Math.min(Math.min(255-R, 255-G), 255-B);
if (K!=255){
c = ((255-R-K)/(255-K));
m = ((255-G-K)/(255-K));
y = ((255-B-K)/(255-K));
C = (int)(255*c);
M = (int)(255*m);
Y = (int)(255*y);
} else {
C = 255-R;
M = 255-G;
Y = 255-B;
}
变量的类型pixel,R,G,B,K,C,M 和 Y 都是整数。变量的类型c、m、y是float。但是当我像这样向日志猫显示结果时,
Log.i("CMYK", String.valueOf(C)+" "+String.valueOf(M)+" "+String.valueOf(Y)+" "+String.valueOf(K));
Log.i("CMYK", String.valueOf(c)+" = ((255-"+String.valueOf(R)+"-"+String.valueOf(K)+")/(255-"+String.valueOf(K)+"))");
Log.i("CMYK", String.valueOf(m)+" = ((255-"+String.valueOf(G)+"-"+String.valueOf(K)+")/(255-"+String.valueOf(K)+"))");
Log.i("CMYK", String.valueOf(y)+" = ((255-"+String.valueOf(B)+"-"+String.valueOf(K)+")/(255-"+String.valueOf(K)+"))");
他们给了我日志猫的这个结果:
08-18 18:34:49.080: I/CMYK(819): 0 0 0 142
08-18 18:34:49.080: I/CMYK(819): 0.0 = ((255-90-142)/(255-142))
08-18 18:34:49.080: I/CMYK(819): 0.0 = ((255-113-142)/(255-142))
08-18 18:34:49.090: I/CMYK(819): 0.0 = ((255-99-142)/(255-142))
正如日志所说,R = 90,G = 113,B = 99 的值... 谁能解释一下为什么数学结果是0??
【问题讨论】:
-
请把RGB的初始值也打印在日志中,我认为R、G、B的值已经是
0了。 -
当你开始得到 0 作为整数数学的结果时,通常是因为表达式中的除数大于被除数。
int x=1/5 => 0,int y=1/1.2 => 0而double z=1/1/2 => 0.833333 -
@Salman Khakwani:R = 90、G = 113 和 B = 99 .. 它在日志中显示
-
@depwl9992 是的,我知道,这就是为什么我将小 c,m,y 设置为浮点数,而大写 C,M,Y,K 是整数......但它仍然为 0结果
标签: android image-processing rgb cmyk