Возникли проблемы с прозрачностью пера в программе рисования
Я относительно новичок в 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 и возвращает
Возвращает: цвет и альфа-компоненты в массиве с плавающей точкой.