在android中生成RGB到CMYK值
我想用这个代码生成RGB到CMYK的值在android中生成RGB到CMYK值,android,image-processing,rgb,cmyk,Android,Image Processing,Rgb,Cmyk,我想用这个代码生成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-
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;
}
变量类型像素,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???如果你使用整数,那么:
255-90-142 = 23
255-142 = 113
23 / 113 = 0 <-- becouse it's int
255-90-142=23
255-142 = 113
23/113=0请在日志中打印RGB的初始值,我认为R、G和B的值已经是0
。当整数数学的结果开始得到0时,通常是因为表达式中的除数大于被除数intx=1/5=>0
,inty=1/1.2=>0
,而double z=1/1/2=>0.833333
@Salman Khakwani:R=90,G=113,B=99。。它的表演在log@depwl9992是的,我知道,这就是为什么我把小的c,m,y设为浮点,而大写的c,m,y,K是整数。。。但是它仍然给结果集0,c,m,y是浮动的。C,M,Y,K是int.是C=((255-90-142)/(255-142))=(23/113)=020353(因为C是浮动的)的结果,然后C=(int)(255*020353)=51.但它在C给出0,,,我的错误在哪里???@adi.zean因为正常数字(255,90,142)是int所以((255-90-142)/(255-142))是int.把它改为((255f-90-142)/(255-142))