Java如何将RGB颜色转换为灰度?现有方法始终返回黑色该如何修复
问题根因
java.awt.Color的getRGBColorComponents方法返回的float数组每个分量取值范围是*0.01.0*,不是0255的整数值- 你对计算得到的灰度值做了
(int)强制类型转换,0.0~1.0区间的数值转int后只会得到0,三个颜色分量最终都为0,所以始终返回纯黑色。
修复方案
二选一即可:
方案1:保留float计算逻辑,删除多余的int强转
public Color gs(Color col) { if (grayScale) { float[] rgb = col.getRGBColorComponents(new float[3]); float gray = 0.299f * rgb[0] + 0.587f * rgb[1] + 0.114f * rgb[2]; rgb[0] = rgb[1] = rgb[2] = gray; col = new Color(rgb[0], rgb[1], rgb[2]); } return col; }
方案2:用0~255整数分量计算
如果习惯用整数逻辑处理,可以直接取255区间的颜色分量计算:
public Color gs(Color col) { if (grayScale) { int gray = (int)(0.299 * col.getRed() + 0.587 * col.getGreen() + 0.114 * col.getBlue()); col = new Color(gray, gray, gray); } return col; }
内容的提问来源于stack exchange,提问作者anirudhc1229
相关产品推荐
相关产品推荐

