2012-05-18 86 views
0

让我开始,我没有代码,我不知道我应该做什么。显然这些信息存储在.png文件的元数据中。我认为这不应该这么难,但是这是一个挑战。如何在Java中为PNG设置每平方英寸点(DPI)?

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

How to set DPI information in an image?

不过,我曾尝试使用系统提供的代码,并提供了做这样的事情,并取得了什么网站。

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

错误是:

  • 的hasNext()方法是未定义的类型HTMLDocument.Iterator
  • 类型不匹配:不能从空隙转换成的ImageWriter

    为(迭代IW =(迭代)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; 
    } 
+1

INCH_2_CM可能是一个“最终”变量,等于2.54,乘法常量将以英寸为单位的长度转换为以厘米为单位的值。 – corsiKa

回答

2

你的代码是获得类javax.swing.text.html.HTMLDocument.Iteratorjava.util.Iterator之间的混淆。他的代码使用后者,但您的代码似乎使用前者。使用完全限定的类型,或者找出如何修改导入。

+0

你说得对,我觉得自己像个白痴。如果没有我显示我的进口数据,你是如何计算出来的? – Zeveso

+0

从'方法hasNext()未定义为类型HTMLDocument.Iterator'非常明显。 –

+0

诚实地说,对该图书馆的设计师做出的一个糟糕的决定,知道可能出现混乱。很可能,他们期望人们只需使用增强的for循环而不是迭代器。 – corsiKa

相关问题