Возникли проблемы с прозрачностью пера в программе рисования

Я относительно новичок в Java, но я создал простую программу рисования, которая позволяет пользователю рисовать, изменять цвет и размер пера и очищать область рисования.

Пользователь выбирает цвет из объекта JColorChooser 'c', и это передается переменной Color 'selected' через c.getColor(). Я хочу иметь возможность изменить прозрачность выбранного цвета, но я не знаю, есть ли способ конвертировать из Color в 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 ответ

Вы можете получить к нему доступ, вызвав метод getComponents в экземпляре Color.

Из документации:

public float [] getComponents (float [] compArray)

Возвращает массив с плавающей точкой, содержащий цвет и альфа-компоненты цвета, в цветовом пространстве цвета. Если compArray имеет значение null, для возвращаемого значения создается массив с длиной, равной количеству компонентов в связанном ColorSpace плюс один. В противном случае compArray должен иметь как минимум эту длину, и он заполняется компонентами и возвращается.

Параметры: compArray - массив, который этот метод заполняет компонентами color и alpha этого Color в его ColorSpace и возвращает

Возвращает: цвет и альфа-компоненты в массиве с плавающей точкой.

Другие вопросы по тегам