栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java:如何将RGB颜色转换为CIE Lab

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:如何将RGB颜色转换为CIE Lab

这是我的实现:

import java.awt.color.ColorSpace;public class CIELab extends ColorSpace {    public static CIELab getInstance() {        return Holder.INSTANCE;    }    @Override    public float[] fromCIEXYZ(float[] colorvalue) {        double l = f(colorvalue[1]);        double L = 116.0 * l - 16.0;        double a = 500.0 * (f(colorvalue[0]) - l);        double b = 200.0 * (l - f(colorvalue[2]));        return new float[] {(float) L, (float) a, (float) b};    }    @Override    public float[] fromRGB(float[] rgbvalue) {        float[] xyz = CIEXYZ.fromRGB(rgbvalue);        return fromCIEXYZ(xyz);    }    @Override    public float getMaxValue(int component) {        return 128f;    }    @Override    public float getMinValue(int component) {        return (component == 0)? 0f: -128f;    }    @Override    public String getName(int idx) {        return String.valueOf("Lab".charAt(idx));    }    @Override    public float[] toCIEXYZ(float[] colorvalue) {        double i = (colorvalue[0] + 16.0) * (1.0 / 116.0);        double X = fInv(i + colorvalue[1] * (1.0 / 500.0));        double Y = fInv(i);        double Z = fInv(i - colorvalue[2] * (1.0 / 200.0));        return new float[] {(float) X, (float) Y, (float) Z};    }    @Override    public float[] toRGB(float[] colorvalue) {        float[] xyz = toCIEXYZ(colorvalue);        return CIEXYZ.toRGB(xyz);    }    CIELab() {        super(ColorSpace.TYPE_Lab, 3);    }    private static double f(double x) {        if (x > 216.0 / 24389.0) { return Math.cbrt(x);        } else { return (841.0 / 108.0) * x + N;        }    }    private static double fInv(double x) {        if (x > 6.0 / 29.0) { return x*x*x;        } else { return (108.0 / 841.0) * (x - N);        }    }    private Object readResolve() {        return getInstance();    }    private static class Holder {        static final CIELab INSTANCE = new CIELab();    }    private static final long serialVersionUID = 5027741380892134289L;    private static final ColorSpace CIEXYZ =        ColorSpace.getInstance(ColorSpace.CS_CIEXYZ);    private static final double N = 4.0 / 29.0;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486007.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号