Alle new ImageIcon() sind schwarz

Java zeigt seit Neuestem nur noch schwarze PNGs als Bilder an; weiß jemand, woran das liegen könnte?

    MarvinImage temp2 = new MarvinImage(ImageIO.read(f1));
    temp2.resize(1000, 100);
    BufferedImage bi1 = temp2.getBufferedImageNoAlpha();

und MarvinImageIO.loadImage(f1.getPath()); dasselbe…

?

komplette Methode:

JFileChooser jfc = new JFileChooser();
jfc.setFileFilter(new FileNameExtensionFilter("nur png s", "png"));
while (jfc.showDialog(null, "png to sep.") == JFileChooser.APPROVE_OPTION) {
    File f1 = jfc.getSelectedFile();
    MarvinImage temp2 = new MarvinImage(ImageIO.read(f1));
    temp2.resize(1000, 100);
    BufferedImage bi1 = temp2.getBufferedImageNoAlpha();

    ArrayList<Double> doubls = new ArrayList<>();
    JFrame jf = new JFrame();
    JLabel jl = new JLabel(new ImageIcon(bi1)) {
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.setColor(Color.red);
            for (double d : doubls) {
                g.drawLine((int) (d * bi1.getWidth()), 0, (int) (d * bi1.getWidth()), this.getHeight());
            }
        }
    };
    jl.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            int x1 = e.getX();
            double d1 = (double) x1 / (double) bi1.getWidth();
            System.out.println("x1 = " + x1);
            System.out.println("d1 = " + d1);
            doubls.add(d1);
            jl.repaint();
        }
    });
    jf.add(jl);
    jf.pack();
    jf.setLocation(500, 500);
    jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    jf.setVisible(true);

    Semaphore s = new Semaphore(1);
    s.acquire();
    jf.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
            s.release();
        }
    });
    s.acquire();

    int[] e = mdnnsep.e(ImageIO.read(f1), mdnnsep.translateOutput(doubls.stream().mapToDouble(Double::new).toArray()));
    System.out.println("e = " + Arrays.toString(e));
}

eigentlich sollen nur ein paar vertikale rote Linien eingezeichnet werden… …

Helft doch mal, woran das liegt…

(Hab ich das PNG versehentlich falsch gespeichert?)

Wie kann man nur so ungeduldig sein?


Zum Thema:

  1. Wann hat das zuletzt funktioniert?
  2. Was hat sich seit dem letzten Funktionieren geändert?
    a. Java-Update?
    b. Update verwendeter Bibliotheken
    c. usw.
  3. Warum löschst du den relevanten Quellcode und drängelst anschließend?
  4. Woher kommt das MarvinImage?
  5. Warum antworte ich überhaupt auf diesen Thread?

wiederhergestellt, dachte zunächst irrelevant

siehe hier: http://marvinproject.sourceforge.net/en/index.html

vorgestern funktionierte es, gestern nicht mehr; Änderungsdatum der Datei ist gleich mit Erstellungsdatum

weiß ich nich :frowning:

weiß ich nicht, .getBufferedImage() (ohne NoAlpha) liefert manchmal ein weißes Bild

MarvinImage bei resize und scale ist eigentlich ein Wrapper für java 2d image processing, und Javas resize algorithm ist eigentlich nicht sehr gut (Pixelklötzchenbildung…), deshalb hab ich einen bilinear algorithm (mit sharpen?) verwendet.

Wenn ich das BufImg nicht flach kopiere, dann funktioniert es.

Du weist schon das das ein blödsinn ist, da du ja selbst bestimmen kannst welche Interpolation du verwendest,
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

oder VALUE_INTERPOLATION_BICUBIC
aber gut.

Hast du schon geschaut ob ImageIO.read(f1) auch das richtige zurück gibt?
Kann es an einem Timing Issue liegen, da ja das laden des Bildes normal aynchron mit einem ImageObservable arbeitet.

Oh, hatte ich gar nicht dran gedacht beim Icon erstellen, ich hatte immer selber interpoliert… Ich ändere das mal.

Btw.: Die rudimentäre Standard Interpolation von Java schafft es, jedes Img unkenntlich zu verpixeln. :smile: