Re: poor png image quality
Thanks for the sscce link, and sorry for the poor code snippet. Here
is a self-contained program which reproduces the problem. I made a
series of dots rather than a single dot, because some dots write better
than others. In particular, many of the png dots have single pixels on
the outside of the circle edges. These look really distracting in the
final product. - Eric
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class PNGWriteTester extends JFrame {
public PNGWriteTester() {
super("PNG Write Tester");
setSize(550, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DotPanel dPanel = new DotPanel();
add(dPanel);
setVisible(true);
writeFromBufferedImage(dPanel);
}
public void writeFromBufferedImage(DotPanel dotPanelIn) {
String fileName = "dotsFromBufferedImage.png";
BufferedImage bImage = new BufferedImage(550, 200,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bImage.createGraphics();
dotPanelIn.drawDots(g2d);
try {
File pngFile = new File(fileName);
ImageIO.write(bImage, "png", pngFile);
JOptionPane.showMessageDialog(null, "Successful png filewrite!");
} catch (IOException e) {
String errorMessage = "File write failed: " + e.toString();
JOptionPane.showMessageDialog(null, errorMessage);
}
}
public static void main(String[] arguments) {
PNGWriteTester writeTester = new PNGWriteTester();
}
}
class DotPanel extends JPanel {
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
Graphics2D comp2D = (Graphics2D) comp;
drawDots(comp2D);
}
public void drawDots(Graphics2D compIn) {
Color backgroundColor = new Color(235, 235, 235);
compIn.setColor(backgroundColor);
compIn.fillRect(0, 0, 550, 200);
Color dotColor = new Color(0, 200, 0);
compIn.setColor(dotColor);
for (int i=5; i<20; i++) {
Ellipse2D.Float dot = new Ellipse2D.Float( 25*(i-4), 25, i, i);
compIn.fill(dot);
}
}
}