Я делаю свой собственный дизайн пользовательского интерфейса на основе свинга JFrame. Элемент кнопки, который я сделал, использует DstOut AlphaComposite, чтобы «гравировать» текст на белой заливке, пока мышь удерживает кнопку. Он заполняет область кнопки белым цветом, а затем закрашивает текст кнопки DstOut, чтобы сделать фон видимым через область, на которой выгравирован текст. Чтобы сделать это, я создаю экземпляр BufferedImage, где я рисую кнопку, а затем гравирую текст. После того, как изображение готово, я рисую его в том месте, где должна быть кнопка.
Нормальное и удерживающее появление кнопки У меня вопрос, могу ли я сделать эту манипуляцию без создания отдельного объекта BufferedImage?
Вышеупомянутый метод имеет для меня недостаток - все настройки графики сбрасываются. Сглаживание - это простая вещь, которую нужно установить заново, но я также планирую использовать масштабирование и преобразование в анимированные переходы сцены.
Если я использую g.scale (4, 4) перед рисованием всего окна, все становится в 4 раза больше, но этот BufferedImage все еще обрабатывает 1 пиксель как 1 пиксель, не зная, что он будет увеличен. Повышение масштаба выполняется, когда BufferedImage рисуется на экране, но не когда рисуется содержимое BufferedImage. Это приводит к тому, что увеличенное изображение выглядит плохо в результате масштабирования изображения в низком разрешении (каждый пиксель занимает область размером 16 пикселей).
Пример увеличения масштаба Как вы можете видеть на скриншоте, Первая кнопка с обычным внешним видом выглядит хорошо, но вторая, которая использует BufferedImage для рисования своей границы (в расширенном анимированном состоянии), выглядит ужасно.
Для меня идеальным решением было бы каким-то образом предотвратить касание AlphaComposite.DstOut. что-нибудь нарисованное до начала рисования кнопки , но , чтобы сделать это, используя тот же экземпляр Graphics2D, чтобы сохранить настройки, включающие масштаб и перевод.
Если это невозможно, можете ли вы порекомендовать способ получения тот же результат, но лучше, чем просто добавить перевод и масштаб для рисования аргументов метода и утомительно его обрабатывать?