Piszę metodę, która podmienia piksele o danym kolorze na obrazie na przezroczyste.

/**
     *
     * @param im - obraz, na którym zamienimy tło na przezroczyste
     * @param bColor - kolor tła obrazka
     */
    public void removeBackground(BufferedImage im, Color bColor) {
        ColorModel model = im.getColorModel();
        WritableRaster raster = im.getRaster();
        int width = im.getWidth();
        int height = im.getHeight();
        int argb, transparent = new Color(0xffffffff, true).getRGB();
        Object data, transparentData = model.getDataElements(transparent, null);
        
        long c = 0;

        for (int i = 0; i < height; ++i) {
            for (int j = 0; j < width; ++j) {
                data = raster.getDataElements(j, i, null);
                argb = model.getRGB(data);
                if (new Color(argb, true).equals(bColor)) {
                    raster.setDataElements(j, i, transparentData);
                    ++c;
                }
            }
        }
        
        System.out.println("Kolor występował na " + c * 100.0 / (width * height) + " % pikseli obrazu.");
        
        // na testowym obrazie piksel o wsp (0,0) ma kolor tła - powinien zostać podmieniony
        System.out.println(java.util.Arrays.toString(raster.getPixel(0, 0, new int[4])));
    }

Niestety, po zastosowaniu tego kodu piksele tła mają kolor biały, zamiast oczekiwanego przezroczystego.

Piksel (0,0) (powinien zostać podmieniony) ma wartość:
[255, 255, 255, 0] , gdzie ostatnie 0 jest wartością kanału alpha.

Potrafię podmienić tło na każdy kolor za wyjątkiem transparent.
Proszę o pomoc.

edit:
Obrazy są w formacie *.png.