1

[ng ファイルの dpi を設定するために次のコードを使用しています。このコードは、このサイトのスレッドの 1 つにのみ表示されます。しかし、例外を作成するこのコードの最初の行を理解できません。

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が初めてなので、理解するのを手伝ってください..

4

1 に答える 1

0

gridImageフィールドが割り当てられることはないnew IIOImage(gridImage, null, metadata)ようです。呼び出されたときはnullです。

于 2013-02-18T14:40:10.363 に答える