Как преобразовать изображение в BufferedImage без инициализации? - PullRequest
4 голосов
/ 28 апреля 2011

Мне интересно, есть ли способ конвертировать Image в BufferedImage без кода, подобного

new BufferedImage(...)

потому что каждый новый init замедляет работу приложения, более того, если оно используется в методе paint (): (

Посоветуйте, пожалуйста, наиболее оптимальный способ конвертации.

Спасибо

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

потому что каждый новый init замедляет работу приложения

Кэшируйте один BufferedImage, затем создавайте новое изображение только в том случае, если требуемый размер изменяется. В противном случае очистите объект Graphics текущего экземпляра и выполните все необходимое новое рисование.

6 голосов
/ 28 апреля 2011

Нет.Нет, если оригинал Image не окажется уже BufferedImage.Тогда вы можете просто выполнить приведение:

BufferedImage bufImg = null;
if (origImage instanceof BufferedImage) {
    bufImg = (BufferedImage) origImage;
else {
    bugImg = new BufferedImage(...);
    // proper initialization
}

Если это не BufferedImage, то вполне может быть, например, VolatileImage (другой конкретный подкласс в API).

Из документов на volatile image:

VolatileImage - это изображение, которое может потерять свое содержимое в любое время из-за не зависящих от приложения обстоятельств (например, ситуаций, вызванных операционной системой или другимиприложения).

Как вы понимаете, такое изображение не может обеспечить тот же интерфейс, что и BufferedImage, поэтому единственный способ получить BufferedImage - это создать его и нарисоватьисходное изображение поверх него.

2 голосов
/ 28 апреля 2011

Есть ли способ нарисовать BufferedImage в JLabel методом paint()?

Одним удобным подходом является реализация интерфейса Icon. В этом примере , Histogram просто рисует себя, когда метка получает значение repaint().

Если для источника изображения требуется трудоемкая операция, например, масштабирование, предварительно просмотрите изображение, как показано на статической фабрике, GradientImage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...