因此遇到了一个涉及Java中使用多种颜色的线性渐变的问题。我希望在渐变的任何位置获得RGB颜色。创建渐变和绘画很容易,我可以获取我设置的那些颜色的分数和颜色。
我的问题是我想在渐变的任何位置获得RGB颜色。
要进行分解,一个示例应用程序是在某些JPanel中创建和显示渐变,渐变大小为255(maxSize = 255(请参见下文))。取决于所述JPanel的大小(maxSize),内插将是不同的(maxSize中的较大数字将导致更多的内插值)。
我希望能够在渐变的任何位置获取RGB值,
您几乎可以将其等同于能够执行以下操作...
根据渐变中的位置获取RGB值
RGB_Values = p.getColorByGradientLocation(float locationInGradient);
要么
在Point2D起点和Point2D终点之间的某个特定值的基础上获取RGB值
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);
非常感谢
最佳答案
感谢Nolo的建议,该建议可以帮助我找出执行此操作的方法。这项工作仍在进行中,我可能会找到一种更好的方法来完成,但是目前这可行。
因此,您需要将线性渐变绘制到面板上,然后将面板绘制到图像上(不显示它)。
BufferedImage bi = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.print(g);
您需要将图像和面板的宽度都设置为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);
如果使用上述方法遍历图像高度,则可以获得所创建渐变的所有颜色值。
:-)
关于java - val的LinearGradientPaint getColor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16065891/