1

所以有一个问题涉及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);

例如设置渐变代码

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);

非常感谢

4

1 回答 1

3

感谢 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);

如果您使用上述方法遍历图像高度,则可以获得您创建的渐变的所有颜色值。

:-)

于 2013-04-17T19:21:30.193 回答