我有一个垂直颜色条,它有7种主要颜色,都作为渐变组合。然后我把它画成JPanel
像这样:
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
int w = getWidth();
int h = getHeight();
Point2D start = new Point2D.Float(0, 0);
Point2D end = new Point2D.Float(0, h);
float[] dist = {
0.02f,
0.28f,
0.42f,
0.56f,
0.70f,
0.84f,
1.0f
};
Color[] colors = {
Color.red,
Color.magenta,
Color.blue,
Color.cyan,
Color.green,
Color.yellow,
Color.red
};
LinearGradientPaint p = new LinearGradientPaint(start, end, dist, colors);
g2d.setPaint(p);
g2d.fillRect(0, 0, w, h);
}
然后我在同一个类中有一个click事件,如下所示:
public void mouseClick(MouseEvent evt){
BufferedImage img = (BufferedImage)this.createImage(getWidth(), getHeight());
int[] colors = new int[3];
int x = evt.getX();
int y = evt.getY();
img.getRaster().getPixel(evt.getX(), evt.getY(), colors);
ColorPickerDialog.sldColor = new Color(colors[0], colors[1], colors[2]);
getParent().invalidate();
getParent().repaint();
}
第img.getRaster().getPixel(evt.getX(), evt.getY(), colors);
行始终返回RGB颜色:
我可以点击任何地方,红色,黄色,绿色,青色等,我总是会回复那些RGB颜色。为什么呢?
答案 0 :(得分:3)
我想我看到了问题。这条线
img.getRaster().getPixel(evt.getX(), evt.getY(), colors);
返回与RGB颜色对应的int []。 getPixel方法将数组作为 一个参数,但它返回自己的数组。它实际上从未接触到你的阵列。你想做的就是这个。
int[] colors = img.getRaster().getPixel(evt.getX(), evt.getY(), new int[3]);
应该在数组中存储方法的返回值,而不是它的默认值。
答案 1 :(得分:0)
我明白了!
我替换了这一行:
BufferedImage img = (BufferedImage)this.createImage(getWidth(), getHeight());
有了这个:
BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
this.paint(g);
现在它完美无缺!