在绘图程序中的笔透明度有问题

时间:2017-05-10 02:01:26

标签: java graphics jcolorchooser

我对Java比较陌生,但我做了一个简单的绘图程序,允许用户绘制,更改笔的颜色和大小,以及清除绘图区域。

用户从JColorChooser对象中选择一种颜色' c'并将其传递给颜色变量'选择'通过c.getColor()。我希望能够更改所选颜色的透明度,但我不知道是否有办法将颜色转换为RGB,以便我可以使用setColor(r,g,b,a)方法。我的代码如下。我真的很感激任何帮助!

Color selected;

public class ColorTool extends JPanel {
    public ColorTool() {
        super(new BorderLayout());
        b = new JLabel("Pen Color", JLabel.CENTER);
        b.setForeground(Color.black);

        c = new JColorChooser(b.getForeground());
        c.getSelectionModel().addChangeListener(new ColorListener());

        add(c, BorderLayout.PAGE_END);
    }
}

public DrawPanel() {
        setDoubleBuffered(false);
        addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {

                    for (int i = 0; i <= 100; i++) {
                        if (PS == i) {
                            oldX = (int)(e.getX() - Math.ceil(PS/2)); 
                            oldY = (int)(e.getY() - Math.ceil(PS/2));
                            if (graphics != null) {
                                graphics.setColor(selected);
                                graphics.fillOval(oldX, oldY, PS, PS);
                            }
                            repaint();
                            oldX = e.getX();
                            oldY = e.getY();
                        }
                    }
                }
            });

        addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseDragged(MouseEvent e) {
                    BasicStroke size = new BasicStroke(PS, 
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
                    currentX = e.getX();
                    currentY = e.getY();
                    if (graphics != null) {
                        graphics.setColor(selected);
                        graphics.setStroke(size);
                        graphics.drawLine(oldX, oldY, currentX, currentY);
                    }
                    repaint();
                    oldX = currentX;
                    oldY = currentY;
                }
            });

    }

public class ColorListener implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        selected = c.getColor();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过调用Color实例上的方法 getComponents 来访问它。

From the documentation:

  

public float [] getComponents(float [] compArray)

     

返回一个float数组,其中包含Color的ColorSpace中Color的颜色和alpha分量。如果compArray为null,则为返回值创建一个长度等于关联ColorSpace中的组件数加1的数组。否则,compArray必须至少具有此长度,并使用组件填充并返回。

     

参数:compArray - 此方法在其ColorSpace中填充此Color的颜色和alpha分量并返回

的数组      

<强>返回:   浮点数组中的颜色和alpha分量。