2013-06-18 3 views
2

Мне было интересно, существует ли разница между Graphics2D.setComposite(..., alpha) и Graphics2D.setColor(new Color(..., alpha)) при использовании прозрачности в Java? Как они влияют друг на друга при использовании комбинации обоих, например.Java Transparency: Graphics2D.setComposite (..., alpha) vs. Color (..., alpha)

Graphics2D.setComposite(..., 0.5f) 
Graphics2D.setColor(new Color(..., 0.5f)) 

Похоже, что результат не является прозрачностью 0,5, но больше похож на 0,25. Есть ли рекомендация использовать один из ранее упомянутых подходов?

ответ

3

Graphics2D.setComposite(..., 0.5f) будет влиять на ВСЕ, что окрашено в контекст Graphics после его применения. Это включает примитивы, а также изображения.

Graphics2D.setColor(new Color(..., 0.5f)) будет влиять только на картину для примитивов, каждая вещь будет окрашена в полный непрозрачный.

Вы правы в том, что если вы нанесете на 50% прозрачный цвет, который будет прозрачным на 50%, то получится 25% прозрачный. Эти два не будут отменять друг друга, но будут сложными.

Думайте об этом таким образом.

@ 100% непрозрачность, цвет 50% непрозрачный.
@ 75% непрозрачности, цвет снижается на 25%, что делает его 37,5% непрозрачным
@ 50% непрозрачности, цвет снижается на 50%, что делает его 25% непрозрачный
@ 25% непрозрачности, цвет уменьшен на 75%, что делает его 12,5% непрозрачным

Смежные вопросы