如何从使用LinearGradientPaint绘制的画布中获取某个RGB值?

时间:2014-03-17 05:50:02

标签: java colors gradient paintcomponent linear-gradients

我使用LinearGradientPaint class绘制了一个动态填充用户定义颜色的矩形。这通过覆盖paintComponent方法来实现。

以下是它的样子:

Image of box painted with LinearGradientPaint

你可以看到顶部的小拇指/手柄。用户可以移动它们,删除它们并添加新的。他们也可以改变颜色。因此,用户可以完全自定义渐变的外观。到目前为止,这没问题,没问题。

我现在需要的是,我尝试搜索此信息,就是在此渐变上获取RGB值

我只知道LinearGradientPaint用于生成渐变的x颜色数量。我知道这些颜色所处的位置(分数)(渐变框下方的数字,与顶部的“拇指”对应。

无论如何都要获取用于生成渐变的RGB值之间的颜色?在我上面的例子中,我指的是黑暗的红色或绿色区域。

2 个答案:

答案 0 :(得分:1)

您可以这样做的方法是创建与组件宽度相同的1像素高BufferedImage,渲染渐变并简单地使用BufferedImage#getRGB之类的东西。

这将返回int打包颜色值,然后您可以使用Color(int)返回Color对象,这样可以更轻松地提取像素的颜色分量。< / p>

当然,如果您使用BufferedImage作为主要输出也会更容易,那么您只需要创建一次,因为您要更新图像以便它可以被渲染到屏幕上,它也是最新的

答案 1 :(得分:1)

如果这确实是new Color(r1,g1,b1)new Color(r2,g2,b2)之间的线性渐变,则x处的颜色为0 <= x <= 1

new Color((int)(r1*(1-x)+r2*x),(int)(g1*(1-x)+g2*x),(int)(b1*(1-x)+b2*x));

当然,我不知道这是否是LinearGradientPaint中实际使用的公式 - 但它应该与此等价。