Вот строковое представление ColorModel
связанного изображения при загрузке через ImageIO
:
IndexColorModel: #pixelBits = 1 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@1572e449 transparency = 2 transIndex = 1 has alpha = true isAlphaPre = false
Если я правильно понимаю, у вас есть один бит на пиксель, где 0
бит непрозрачный черный, а бит 1
прозрачный.Ваш BufferedImage
изначально весь черный, поэтому рисование на нем смеси черных и прозрачных пикселей не будет иметь никакого эффекта.
Хотя вы используете AlphaComposite.Src
, это не поможет, поскольку значения R / G / Bдля записи прозрачной палитры читается как ноль (я не уверен, кодируется ли это в GIF или просто по умолчанию в JDK.)
Вы можете обойти это:
- Инициализация
BufferedImage
с полностью белыми пикселями - Использование
AlphaComposite.SrcOver
Таким образом, последняя часть вашей resize2D
реализации станет:
// Paint image.
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, size, size);
g2d.setComposite(AlphaComposite.SrcOver);
g2d.drawImage(srcImage, tx, null);