2014-11-13 3 views
3

Я читаю PNG изображения с помощью следующего кода:Удаление прозрачности в PNG BufferedImage

BufferedImage img = ImageIO.read(new URL(url)); 

При отображении его, есть черный фон, который я знаю, связано с прозрачностью PNG. Моя попытка исправить это была установка каждого пикселя с альфа-значением, не равным 255, до Color.white. Это не решило проблему.

Я нашел ответы на вопрос, предлагая использовать BufferedImage.TYPE_INT_RGB, однако я не уверен, как применить это, учитывая мой код выше. Любая помощь будет оценена по достоинству.

ответ

12

Создать второй BufferedImage типа TYPE_INT_RGB ...

BufferedImage copy = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB); 

Краска оригинал копии ...

Graphics2D g2d = copy.createGraphics(); 
g2d.setColor(Color.WHITE); // Or what ever fill color you want... 
g2d.fillRect(0, 0, copy.getWidth(), copy.getHeight()); 
g2d.drawImage(img, 0, 0, null); 
g2d.dispose(); 

Теперь у вас есть непрозрачный вариант изображения ...

Чтобы сохранить изображение, взгляните на Writing/Saving an Image

+0

Мне нужно было нарисовать изображение на весь прямоугольник, чтобы он полностью заполнил его. Синтаксис немного меняется: 'g2d.drawImage (img, 0, 0, copy.getWidth(), copy.getHeight(), null);' –

+0

@JanPetzold Решение будет зависеть от требований, лично я использую «масштаб для заполнения», который поддерживает соотношение сторон исходного изображения, например [https://stackoverflow.com/questions/11959758/java-maintaining-aspect-ratio-of-jpanel-background-image/11959928 # 11959928). В большинстве случаев встроенные алгоритмы масштабирования фокусируются на скорости по качеству, поэтому вы должны просто опасаться этого – MadProgrammer

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