Avatar billede Slettet bruger
01. december 2003 - 23:06 Der er 2 kommentarer og
1 løsning

BufferedImage, PNG, Kan kun få grå billeder

Jeg vil gerne lave et program der tager et billede, laver det om til PNG og komprimerer det til 16 farver.

Men jeg kan ikke få billedet i farver. Det gemmes i gråtoner.

Hvad gør jeg forkert?

Her følger eksempel, fil ColorTest.java:
*******************************************************

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.IndexColorModel;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

public class ColorTest {

    public static void main(String[] args) throws IOException {
        URL imageURL =
            new URL("http://www.google.com/images/web_logo_left.gif");
        BufferedImage bufferedImage = ImageIO.read(imageURL);
        ImageIO.write(
            bufferedImage,
            "jpeg",
            new File("C:\\temp\\test\\web_logo_left.jpg"));

        byte[] colors = new byte[6];
        int b = 0xff / (colors.length - 1);
        for (int i = 0; i < colors.length; i++) {
            colors[i] = (byte) (b * i);
        }
        IndexColorModel colorModel =
            new IndexColorModel(4, colors.length, colors, colors, colors);
        BufferedImage image =
            new BufferedImage(
                bufferedImage.getWidth(),
                bufferedImage.getHeight(),
                BufferedImage.TYPE_BYTE_INDEXED,
                colorModel);
        Graphics2D g = image.createGraphics();
        g.drawImage(bufferedImage, null, 0, 0);

        ImageIO.write(
            image,
            "PNG",
            new File("C:\\temp\\test\\web_logo_left.png"));
    }
}
Avatar billede ulrikm Nybegynder
03. december 2003 - 16:33 #1
Jeg forstår ikke, hvad du forsøger at opnå med nedenstående:

      byte[] colors = new byte[6];
        int b = 0xff / (colors.length - 1);
        for (int i = 0; i < colors.length; i++) {
            colors[i] = (byte) (b * i);
        }
        IndexColorModel colorModel =
            new IndexColorModel(4, colors.length, colors, colors, colors);

- men du kan da konvertere billedet til rød, grøn og blå ved at udskifte det med følgende:

        byte[] colorsR = new byte[3];
        byte[] colorsG = new byte[3];
        byte[] colorsB = new byte[3];
        //rød
        colorsR[0] = (byte) 255;
        colorsG[0] = (byte) 0;
        colorsB[0] = (byte) 0;
    //grøn
    colorsR[1] = (byte) 0;
        colorsG[1] = (byte) 255;
        colorsB[1] = (byte) 0;
    //blå       
        colorsR[2] = (byte) 0;
        colorsG[2] = (byte) 0;
        colorsB[2] = (byte) 255;
        IndexColorModel colorModel =
            new IndexColorModel(4, colorsR.length, colorsR, colorsG, colorsB);
Avatar billede Slettet bruger
03. december 2003 - 21:34 #2
ulrikm: Tak for kommentaren. Jeg havde ikke forstået, hvad IndexColorModel var for noget. Og det har jeg egentlig stadigvæk ikke. Smid et svar og få dine point.

Du er også velkommen til at svare på http://www.eksperten.dk/spm/435174, de point hører også til.
Avatar billede ulrikm Nybegynder
04. december 2003 - 07:07 #3
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester