В вашем коде есть 3 проблемы:
1) Замените
Image image = makeColorTransparent(source, new Color(color), new Color(255, 0, 0));
на
Image image = makeColorTransparent(source, color, new Color(255, 0, 0));
и
public static Image makeColorTransparent(BufferedImage im, final Color search, final Color replace) {
...
if (rgb == search.getRGB()) {
...
}
на
public static Image makeColorTransparent(BufferedImage im, final int search, final Color replace) {
...
if (rgb == search) {
...
}
ПОСКОЛЬКУ по какой-то причине source.getRGB(0, 0)
игнорирует альфа-значение и становится белым ((255, 255, 255, 0) становится (255, 255, 255, 255))
2) Вы не можете использовать int color = source.getRGB(0, 0)
, потому что он использует цвет первого пикселя (прозрачный).Вы должны использовать какой-то другой код (например, запросить цвет в консоли), чтобы узнать, какой цвет пикселя хранить в int color
3) Вы очищаете цвет BufferedImage bufferedImage
в imageToBufferedImage(...)
с помощью Color.BLACK
(по умолчанию).Замените //g2.setBackground(Color.blue);
на g2.setBackground(new Color(0, 0, 0, 0));
или удалите g2.clearRect(...);