【问题标题】:Generate RGB to CMYK value in android在android中生成RGB到CMYK值
【发布时间】: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 => 0double 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


【解决方案1】:

如果你使用整数,那么:

255-90-142 = 23
255-142 = 113
23 / 113 = 0   <-- becouse it's int

其余代码相同。

【讨论】:

  • 我将 c、m、y 设置为浮点数。和 C,M,Y,K 是整数。是 c = ((255-90-142)/(255-142)) = (23/113) = 0,20353 的结果(因为 c 是浮点数)然后 C = (int)(255*0, 20353) = 51..但它在 c 处给出 0,,, 我的错误在哪里??
  • @adi.zean 因为普通数字(255, 90, 142) 是整数,所以 ((255-90-142)/(255-142)) 是整数。将其更改为 ((255f-90-142)/(255-142))
猜你喜欢
  • 1970-01-01
  • 2012-01-30
  • 2011-07-11
  • 1970-01-01
  • 2018-07-04
  • 2011-06-17
  • 2013-08-15
  • 2021-06-10
  • 1970-01-01
相关资源
最近更新 更多