gpt4 book ai didi

java - 如何在Java中为折线图生成不同颜色的相同亮度?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:08 24 4
gpt4 key购买 nike

我想为我的折线图生成不同的颜色:

  • 我想生成同样不同的颜色(用于人眼)
  • 我希望它们具有相同的亮度(不是计算的亮度)

(这排除了RGB和HSL,YIQ接近但亮度不完全均匀)

您是否使用过任何库(在 Java 中)来处理统一配色方案的生成?

我已经在这个问题上花了几天时间,所以我希望你们中的一些人有同样的问题并解决了它。

谢谢!

编辑:不幸的是,我不能在 AppEngine 上使用 java.awt 包(或任何使用 java.awt.Color 的东西)。

最佳答案

这是我刚刚通过查看 Wikipedia 页面 http://en.wikipedia.org/wiki/SRGB_color_space 编写的一个小函数

private int makeARGB(double Y, double x, double y) {
// Out of gamut colour
int rgb = 0xFF808080;
double X = Y * x / y;
double Z = Y * (1 - x - y) / y;
double rlin = +3.2046 * X + -1.5372 * Y + -0.4986 * Z;
double r = gamma(rlin);
int ir = (int) (r * 255.0);
if (ir >= 0 && ir < 256) {
double glin = -0.9689 * X + +1.8758 * Y + +0.0415 * Z;
double g = gamma(glin);
int ig = (int) (g * 255.0);
if (ig >= 0 && ig < 256) {
double blin = +0.0557 * X + -0.2040 * Y + +1.0570 * Z;
double b = gamma(blin);
int ib = (int) (b * 255.0);
if (ib >= 0 && ib < 256) {
rgb = 0xFF000000 + (ir << 16) + (ig << 8) + (ib << 0);
}
}
}
return rgb;
}
private double gamma(double l) {
if (l < 0.0031308) {
return l * 12.92;
} else {
return 1.055 * Math.pow(l, 1.0 / 2.4) - 0.055;
}
}
private BufferedImage createImage() {
BufferedImage bm = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
for (int ix = 0; ix < bm.getWidth(); ++ix) {
double astar = ((double) ix) / ((double) bm.getWidth());
for (int iy = 1; iy < bm.getHeight(); ++iy) {
double bstar = ((double) iy) / ((double) bm.getHeight());
int rgb = makeARGB(0.3, astar, bstar);
bm.setRGB(ix, iy, rgb);
}

}
return bm;
}

您传入亮度 Y 和颜色坐标 x,y。 x 和 y 名义上从 0..1 开始,但很多“空间”不在 sRGB 色域中,因此不对应于可显示的颜色。 Y 也是 0..1,先试试 0.3..0.5。

示例图片:gamut with Y=0.3

我对谷歌应用引擎一无所知,但 ARGB 整数是您需要的那种颜色规范吗?

关于java - 如何在Java中为折线图生成不同颜色的相同亮度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com