2012-05-18 60 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

相關問題