Заполнение прозрачностью с использованием Graphics2D

StackOverflow https://stackoverflow.com/questions/4565909

Вопрос

Я создал 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*/);                    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top