Заполнение прозрачностью с использованием Graphics2D
-
14-10-2019 - |
Вопрос
Я создал Argb BufferedImage. Теперь я хотел бы повторно его сносит с прозрачным фоном. Я попробовал следующий код:
(...)
if( this.offscreen==null ||
this.offscreen.getWidth()!= dim.width ||
this.offscreen.getHeight()!= dim.height )
{
this.offscreen=new BufferedImage(
dim.width,
dim.height,
BufferedImage.TYPE_INT_ARGB);
}
Graphics2D g=this.offscreen.createGraphics();
g.setColor(new Color(255,255,255,0));
g.clearRect(0, 0, dim.width, dim.height);
(...)
Но это не сработало.
Есть идеи о том, как это сделать, пожалуйста?
Спасибо !
Решение
g.clearRect(..)
заполняет выбранный прямоугольник Graphics2D
объект. Тебе лучше делать g.fillRect(..)
который даст предполагаемый результат с вашим кодом или установит цвет фона Graphics2D
объект заранее (g.setBackground(..)
).
Кроме того, вам, возможно, придется сделать g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
Перед заполнением, чтобы он правильно установил буфер (игнорируйте данные буфера назначения, используйте только исходные данные - в данном случае операция заполнения). Не уверен, что такое значение по умолчанию для этого значения, но вы должны настроить его обратно на это, чтобы обеспечить надлежащую работу.
Другие советы
У меня была эта проблема раньше, и я решил ее с действительно узким трюком. Вот сделка:
В конструкторе класса краски сделайте снимок экрана системы, но будьте осторожны
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));
И где вы хотите очистить экран
g2D.drawImage(image, null, /*your Image observer*/);