In java, wie du schreibst ein java.das awt.Bild.BufferedImage in ein 8-bit-png-Datei?

Ich versuche zu schreiben, die eine png-Datei aus einem java.das awt.Bild.BufferedImage. Alles funktioniert gut, aber die resultierende png ist ein 32-bit-Datei.

Gibt es eine Möglichkeit, um die png-Datei 8-bit? Das Bild ist in Graustufen, aber ich brauche Transparenz, da dies ein overlay-Bild. Ich bin mit java 6, und ich würde es vorziehen, um eine Ausgabestrom so kann ich die aufrufende Klasse befassen sich mit dem schreiben der Datei auf die Festplatte/db.

Hier ist der relevante Teil des Codes:

 public static ByteArrayOutputStream createImage(InputStream originalStream)
            throws IOException {

        ByteArrayOutputStream oStream = null;

        java.awt.Image newImg = javax.imageio.ImageIO.read(originalStream);
        int imgWidth = newImg.getWidth(null);
        int imgHeight = newImg.getHeight(null);
        java.awt.image.BufferedImage bim = new java.awt.image.BufferedImage(imgWidth,
                imgHeight, java.awt.image.BufferedImage.TYPE_INT_ARGB);

        Color bckgrndColor = new Color(0x80, 0x80, 0x80);

        Graphics2D gf = (Graphics2D)bim.getGraphics();

        //set transparency for fill image
        gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
        gf.setColor(bckgrndColor);
        gf.fillRect(0, 0, imgWidth, imgHeight);

        oStream = new ByteArrayOutputStream();
        javax.imageio.ImageIO.write(bim, "png", oStream);
        oStream.close();

        return oStream;
    }
InformationsquelleAutor | 2008-11-05
Schreibe einen Kommentar