簡體   English   中英

javax.imageio.ImageReader一遍又一遍地加載相同的圖像

[英]javax.imageio.ImageReader loading the same image over and overagain

我有一些使用ImageReader類讀取大量TIF圖像的代碼。 imageReader對象是最終對象,並在構造函數中創建。

synchronized(imageReader) {
    LOG.debug(file);
    FileInputStream fin = new FileInputStream(file);
    ImageInputStream iis = ImageIO.createImageInputStream(fin);
    imageReader.setInput(iis, false);
    int sourceXSubSampling = targetSize == null ?
            1 : Math.max(1, imageReader.getWidth(0) / targetSize.width);
    int sourceYSubSampling = targetSize == null ?
            1 : Math.max(1, imageReader.getHeight(0) / targetSize.height);
    ImageReadParam subSamplingParam = new ImageReadParam();
    subSamplingParam.setSourceSubsampling(sourceXSubSampling, sourceYSubSampling, 0, 0);
    return imageReader.read(0, subSamplingParam);
}

在大約四分之一的實例中,ImageReader會在其加載的第一個圖像上“卡住”,即使它提供了不同的ImageInputStreams,也一遍又一遍地加載相同的圖像。 通過記錄器的輸出可以證明這一點。

我該如何解決。 我正在考慮對圖像進行“指紋識別”,並在發生這種情況時從迭代器獲取其他ImageReader,但這似乎有點過頭。 有誰知道如何解決這個問題?

正如@MadProgrammer在評論部分中所述,讀取多張圖像的典型模式是為每個圖像獲取一個新的ImageReader ,然后對其進行dispose() 與實際讀取圖像相比,用於創建讀取器實例的時間/內存非常小。 因此,任何性能損失都可以忽略不計。

從理論上講,在每次read之前/之后在ImageReader上調用reset()應該足夠了。

暫無
暫無

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

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