Effekt bei Bildformatierung

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,
ich habe ein Stück Code was ein Image einliest und es mit möglich wenig Qualitätsverlust verkleinert.
Dabei ist der Code auch noch recht pefomant.
Nur das Problem ist das das eingelesene Bild im Originalzustand ok ist und nach dem umwandeln (siehe Codezeile)
die Farbe nicht mehr stimmen.
Wo dran könnte das liegen?

Danke schonmal für die Hilfe.

Hier der Code:

Code:
public static void main(String[] args) throws IOException
    {
        Image imageM = ImageIO.read(new File("testbild.png"));
        BufferedImage bimage = new BufferedImage(imageM.getWidth(null), imageM.getWidth(null), BufferedImage.TYPE_INT_RGB);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gs = ge.getDefaultScreenDevice();
        GraphicsConfiguration gc = gs.getDefaultConfiguration();

        double width = imageM.getWidth(null);
        double height = imageM.getHeight(null);

        double faktorWidth = 1 / (width / 100);
        double faktorHeight = 1 / (height / 100);

        double aktFaktor = 1;

        if (faktorHeight > faktorWidth)
            aktFaktor = faktorHeight;
        else
            aktFaktor = faktorWidth;

        bimage = gc.createCompatibleImage((int) width, (int) height, Transparency.OPAQUE);
        Graphics2D g = bimage.createGraphics();

        RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g.drawImage(imageM, 0, 0, null);
        g.dispose();
        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bimage)));
        AffineTransform tx = new AffineTransform();

        tx.scale(aktFaktor, aktFaktor);

        
        float[] elements = new float[4];
        for (int i = 0; i < elements.length; i++)
            elements[i] = 1;


//Hier ist das Bild noch ok
        Kernel kernel = new Kernel(1, 1, elements);
        ConvolveOp op = new ConvolveOp(kernel); 
        BufferedImage bufImage = op.filter(bimage, new BufferedImage(imageM.getWidth(null), imageM.getHeight(null), BufferedImage.TYPE_INT_ARGB));

//Hier ist das Bild kaputt. (Farben im Eimer)
        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bufImage)));

        AffineTransformOp op2 = new AffineTransformOp(tx, renderingHints);
        bufImage = op2.filter(bufImage, null);
        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bufImage)));
    }
 
R

r.w.

Gast
Gast hat gesagt.:
Hallo,
ich habe ein Stück Code was ein Image einliest und es mit möglich wenig Qualitätsverlust verkleinert.
Dabei ist der Code auch noch recht pefomant.
Nur das Problem ist das das eingelesene Bild im Originalzustand ok ist und nach dem umwandeln (siehe Codezeile)
die Farbe nicht mehr stimmen.
Wo dran könnte das liegen?

Danke schonmal für die Hilfe.

Also ich hab den Code mit unterschiedlichen JPGs ausprobiert,
bei denen die Farben immer korrekt konvertiert wurden.

Als Idee kommt mir höchstens, dass Du oben

"BufferedImage.TYPE_INT_RGB"

und unten

"BufferedImage.TYPE_INT_ARGB"

verwendet hast. Bei mir hat das Austauschen allerdings
auch keine Änderung gebracht.

Vielleicht postest Du mal das Bild, bei dem das Problem auftritt.
Oder versuchst alternativ, ob der "Fehler" auch bei anderen Dateien
(z.B. JPG-) auftritt. Eine Idee wäre, dass Dein PNG transparente
Bereiche enthält. In dem Fall könnte ich mir vorstellen, dass es
etwas bringt, wenn Du auch oben ARGB als Typen übergibst.

Gruß, Rolf
 
G

Guest

Gast
Gast hat gesagt.:
Code:
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gs = ge.getDefaultScreenDevice();
        GraphicsConfiguration gc = gs.getDefaultConfiguration();

         ...

        bimage = gc.createCompatibleImage((int) width, (int) height, Transparency.OPAQUE);

Wenn ich mich recht entsinne, sorgt das doch dafür, daß du ein Bild bekommst, das deiner Hardware, bzw. Grafikkarteneinstellung entspricht :?:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben