You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:39:05