Вот исправление, которое сработало для меня. Сразу после создания fileredImage, описанного выше, необходимо было фактически добавить отфильтрованное изображение в JLabel и JLabel в JFrame, чтобы сначала вывести его на экран перед записью в буфер и сохранить на диск:
...
Image filteredImage = Toolkit.getDefaultToolkit().createImage(ip);
ImageIcon swingImage = new ImageIcon(filteredImage);
JFrame frame = new JFrame();
JLabel label = new JLabel(swingImage);
frame.add(label);
frame.setVisible(true);
frame.dispose();
BufferedImage bim = new BufferedImage( originalImage.getIconWidth(),originalImage.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bim.createGraphics();
g2.drawImage(filteredImage, 0, 0, null);
g2.dispose();
File file = new File(directory + File.separator + baseFileName + ".png");
file.createNewFile();
boolean status = ImageIO.write(bim, "png", file);
System.out.print("write() status: " + status);
}
Я пока не совсем понимаю, почему это не может быть сделано полностью за кадром, как я хотел, однако было достаточно легко избавиться от JFrame сразу после его открытия. Лучшее решение не потребовало бы использования компонентов пользовательского интерфейса для этого, так как в этом случае мне не нужно ничего отображать на экране, а просто хочу конечный продукт.
Спасибо Hovercraft за указание в правильном направлении.