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:
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)));
}