LinearGradientPaint getColor by val

时间:2013-04-17 16:58:26

标签: java colors awt linear-gradients

所以在Java中有一个涉及线性渐变的问题,使用多种颜色。我希望在agradient的任何一点获得RGB颜色。创建渐变和绘画很容易,我可以得到那些颜色的分数和颜色我设置.....

我遇到的问题是我想在渐变的任何一点获得RGB颜色。 为了打破它,一个示例应用程序将是在一些JPanel中创建和显示渐变,其大小为255(maxSize = 255(见下文))。取决于所述JPanel(maxSize)的大小,插值将是不同的(maxSize中的较大数字将导致更多的插值)。 我希望能够在渐变的任何位置抓取RGB值, 你几乎可以把它等同于能够做到以下......

根据渐变中的位置

获取RGB值
RGB_Values = p.getColorByGradientLocation(float locationInGradient);

根据特定值抓取RGB值,介于Point2D start和Point2D end

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

非常感谢

1 个答案:

答案 0 :(得分:2)

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

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

: - )