我使用LinearGradientPaint class绘制了一个动态填充用户定义颜色的矩形。这通过覆盖paintComponent
方法来实现。
以下是它的样子:
你可以看到顶部的小拇指/手柄。用户可以移动它们,删除它们并添加新的。他们也可以改变颜色。因此,用户可以完全自定义渐变的外观。到目前为止,这没问题,没问题。
我现在需要的是,我尝试搜索此信息,就是在此渐变上获取RGB值 。
我只知道LinearGradientPaint
用于生成渐变的x颜色数量。我知道这些颜色所处的位置(分数)(渐变框下方的数字,与顶部的“拇指”对应。
无论如何都要获取用于生成渐变的RGB值之间的颜色?在我上面的例子中,我指的是黑暗的红色或绿色区域。
答案 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
中实际使用的公式 - 但它应该与此等价。