【问题标题】:LinearGradientPaint getColor by valLinearGradientPaint 通过 val 获取颜色
【发布时间】:2013-04-10 13:27:32
【问题描述】:

所以有一个问题涉及 Java 中的线性渐变,使用多种颜色。我希望在渐变的任何一点上获得 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);

非常感谢

【问题讨论】:

  • 为标签上的编辑干杯......我可能知道如何排序......可能不是正确的方式......STACKOVERFLOW用户我会和你比赛:)
  • 这个post 可能会有所帮助。
  • 嗨 Nolo,这是你的帖子,我已经找到答案,将作为答案发布

标签: java colors awt linear-gradients


【解决方案1】:

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

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

:-)

【讨论】:

  • 你给我省了很多麻烦!谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多