LinearGradientPaint getColor by val



所以我得到了一个关于Java线性渐变的问题,使用多种颜色。我希望得到一个RGB颜色在任何一点沿梯度。创建渐变和绘画是很容易的,我可以得到分数和颜色为那些颜色设置.....

我的问题是,我想得到一个RGB颜色在任何点沿梯度。为了分解它,一个示例应用程序将是在某些JPanel中创建和显示大小为255的梯度(maxSize=255(见下文))。根据所述JPanel (maxSize)的大小,插值将有所不同(maxSize的数字越大,将导致更多的插值值)。我希望能够在渐变的任何位置抓取RGB值,你几乎可以把它等同于能够做以下事情…

根据渐变中的位置获取RGB值

RGB_Values = p.getColorByGradientLocation(float locationInGradient);

根据特定值抓取RGB值,介于Point2D开始和Point2D结束之间

RGB_Values = p.getColorByValue(float value);

e。G设置梯度代码

Point2D start = new Point2D.Float(0, 0);
Point2D end = new Point2D.Float(0, maxSize);
Color[] colors = {n number of colors};
dist[] = ((float) i / (float) colors.length); //equally distributes colors
p = new LinearGradientPaint(start, end, dist, colors, CycleMethod.NO_CYCLE);

多谢

感谢Nolo的建议,帮助我想出了一个方法来做到这一点。这仍在进行中,我可能会找到一个更好的方法来做到这一点,但现在这工作....

所以你需要绘制一个面板的线性梯度,然后绘制面板的图像(不显示它)。

BufferedImage bi = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.print(g);

你需要设置图像和面板的宽度为1,然后高度匹配梯度结束(做1宽度为速度)。

显示渐变,然后你可以从每一行抓取1个像素,然后使用image.getRGB(x,y)来获得像素值与位设置相结合,例如

int rgb = im.getRGB(0, i);
r = (rgb >> 16) & 0xFF;
g = (rgb >> 8) & 0xFF;
b = (rgb & 0xFF);
Color newC = new Color(r, g, b);

如果你用上面的方法遍历图像高度,你可以得到你创建的渐变的所有颜色值。

: -)

最新更新