2010-12-30 2 views
2

Я создал ARGB BufferedImage. Теперь я хотел бы повторно инициализировать его прозрачным фоном. Я пробовал следующий код:Заполнение прозрачностью с использованием Graphics2D

(...) 
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); 
(...) 

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

Любая идея о том, как это сделать, пожалуйста?

Спасибо!

+0

Ждут» Как работать? Бросил исключение? создал синее изображение? создал нулевой образ? – Will

+0

мой экран черный на белом фоне. – Pierre

ответ

2

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

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

+0

спасибо! Решение setBackground было решением. – Pierre

-1

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

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

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

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

g2D.drawImage(image, null, /*your Image observer*/);      
Смежные вопросы