Заполнение прозрачностью с использованием Graphics2D - PullRequest
2 голосов
/ 30 декабря 2010

Я создал 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);
(...)

, но он не сработал.

Есть идеи, как это сделать, пожалуйста?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

g.clearRect(..) заполняет выделенный прямоугольник цветом фона объекта Graphics2D. Вам лучше сделать g.fillRect(..), который даст ожидаемый результат с вашим кодом, или заранее установить цвет фона объекта Graphics2D (g.setBackground(..)).

Кроме того, вам может потребоваться выполнить g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); перед заполнением, чтобы правильно установить буфер (игнорировать данные целевого буфера, использовать только исходные данные - в данном случае, операцию заполнения). Не уверен, что по умолчанию для этого значения, но вы должны установить его обратно, чтобы обеспечить правильную работу.

0 голосов
/ 16 мая 2013

У меня была эта проблема раньше, и я решил ее с очень узкой уловкой. Вот сделка:

В конструкторе класса рисования сделайте снимок экрана системы, но будьте осторожны

BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));

А где вы хотите очистить экран

g2D.drawImage(image, null, /*your Image observer*/);                    
...