所以我得到了一个关于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);
如果你用上面的方法遍历图像高度,你可以得到你创建的渐变的所有颜色值。
: -)