0

让我从我没有代码开始,我不知道我应该做什么。显然,信息存储在 .png 文件的元数据中。我认为这应该不难做到,但事实证明这是一个挑战。

唯一看起来有点有用的是堆栈溢出的以下帖子。

如何在图像中设置 DPI 信息?

但是,我尝试使用提供的代码和提供的网站来做这些事情,但一无所获。

当我尝试使用迭代器时,如下所示,iw.hasNext() 和 iw.next() 都出现错误。

错误是:

  • 对于 HTMLDocument.Iterator 类型,方法 hasNext() 未定义
  • 类型不匹配:无法从 void 转换为 ImageWriter

    for (Iterator iw = (Iterator) ImageIO.getImageWritersByFormatName(formatName); iw.hasNext;) { ImageWriter writer = iw.next();

我的问题是,我从哪里开始,我需要寻找什么?有没有你知道的或者你自己做过的例子?


附注我关于“如何在图像中设置 DPI 信息?”的问题。帖子是这个...

  1. 为什么当我像他一样使用迭代器时,会出现错误?
  2. “INCH_2_CM”应该是什么意思/是?

我更改他的代码的方式如下...


    for (Iterator iw = (Iterator) 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;
    }
4

1 回答 1

2

您的代码在类javax.swing.text.html.HTMLDocument.Iteratorjava.util.Iterator. 他的代码使用后者,但您的代码似乎使用的是前者。使用完全限定的类型,或者弄清楚如何修改您的导入。

于 2012-05-18T23:40:02.733 回答