簡體   English   中英

在java和eclipse錯誤上將圖像從.bmp轉換為jpeg2000

[英]Converting images from .bmp to jpeg2000 on java and eclipse error

我在這里看到了一些示例,並在我的計算機上安裝了Java Advanced Imaging Image I / O Tools,因為很明顯它是處理JPEG2000圖像的必要條件。

安裝后我可以導入庫

例如

import com.sun.media.imageio.plugins。*;

導入后,我應該能夠使用該庫的構造函數或方法,但我收到此錯誤:

“訪問限制:類型'J2KImageWriteParam'不是API(對所需庫'C:\\ Program Files(x86)\\ Java \\ jre1.8.0_77 \\ lib \\ ext \\ jai_imageio.jar'的限制')”

經過一些研究,我發現我可以改變eclipse偏好並忽略該錯誤。

我經歷過這樣的方式:首選項 - > Java - >編譯器 - >錯誤/警告 - >不推薦使用和受限制的API。 然后我將錯誤更改為警告。 但是現在我無法使用該庫有效,因為eclipse不會對該庫提出任何建議。

我的第一個問題是; 如果還有更好的方法嗎? 或者也許在eclipse中使用這個庫有效的另一種方法?

編輯:我發現它是32位和64位版本的復雜功能。 安裝32位JDK並引用jai_imageio.jar后它運行正常。

第二; 任何人都可以給我一個簡單的例子,將.bmp圖像轉換為jpeg2000圖像。 這對我來說對於不受歡迎的情況有很大幫助。

謝謝

您需要在導入中使用這些:

     import javax.imageio.*;
     import javax.imageio.stream.*;

     import com.sun.media.imageio.plugins.jpeg2000.*;
     import com.sun.media.imageio.stream.*;

和這些罐子

jai_imageio.jar;jai_codec.jar;jai_core.jar 

這是一個運行良好的例子 - 但不知道生成的j2k是否有效 - 使用你的j2000查看器來檢查。

 public void toJ2000(String inputFile, String outputFile) throws IOException {
J2KImageWriteParam iwp = new J2KImageWriteParam();
FileInputStream fis = new FileInputStream(new File(inputFile));
BufferedImage image = ImageIO.read(fis);
fis.close();

if (image == null) 
{
    System.out.println("If no registered ImageReader claims to be able to read the resulting stream");
}

Iterator writers = ImageIO.getImageWritersByFormatName("JPEG2000");
String name = null;
ImageWriter writer = null;
while (name != "com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriter") {
    writer = (ImageWriter) writers.next();
    name = writer.getClass().getName();
    System.out.println(name);
}
File f = new File(outputFile);
long s = System.currentTimeMillis();
ImageOutputStream ios = ImageIO.createImageOutputStream(f);
writer.setOutput(ios);
J2KImageWriteParam param = (J2KImageWriteParam) writer.getDefaultWriteParam();
IIOImage ioimage = new IIOImage(image, null, null);

writer.write(null, ioimage, param);
System.out.println(System.currentTimeMillis() - s);
writer.dispose();
ios.flush();
ios.close();

image.flush();
}

  public static void main(String[] args) {
    TR t=new TR();
    try {
       t.toJ2000("yel.png", "yel.j2k");
    }
    catch (Exception ex) { ex.printStackTrace(); }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM