[ng 파일의 dpi를 설정하려면 다음 코드를 사용하고 있습니다. 나는 예외 생성이 코드의 첫 번째 줄 이해 드릴 수 없습니다 only..But이 코드는이 사이트의 스레드 중 하나에 표시됩니다 :자바에서 png 이미지의 DPI를 설정하십시오.
static BufferedImage gridImage;
....
private static void saveGridImage(File output) throws IOException {
output.delete();
final String formatName = "png";
for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) {
ImageWriter writer = iw.next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) {
continue;
}
setDPI(metadata);
final ImageOutputStream stream = ImageIO.createImageOutputStream(output);
try {
writer.setOutput(stream);
writer.write(metadata, new IIOImage(gridImage, null, metadata), writeParam);
} finally {
stream.close();
}
break;
}
}
private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {
// for PMG, it's dots per millimeter
double dotsPerMilli = 1.0 * 300/10/2.54;
IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
horiz.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
vert.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode dim = new IIOMetadataNode("Dimension");
dim.appendChild(horiz);
dim.appendChild(vert);
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
root.appendChild(dim);
metadata.mergeTree("javax_imageio_1.0", root);
}
예외입니다 :
java.lang.IllegalArgumentException: image == null!
도와주세요 Java에 익숙하지 않기 때문에 알아낼 수 있습니다.
예외가 발생하는 곳 (메서드, 줄)을 확인해야합니다. 이 줄의 – leonbloy
writer.write (메타 데이터, 새 IIOImage (gridImage, null, 메타 데이터), writeParam); – rupareliab
'1.0 * 300/10/2.54 == 300/25.4' – krispy