[英]How would I open a folder using threads in ImageJ? (Java)
作為我的ImageJ插件中的項目的一部分,我需要打開多達3000張圖像作為ImageStack。 用戶選擇一個包含所有文件的文件夾
DirectoryChooser dirChoos = new DirectoryChooser("Select Folder");
String filePath = dirChoos.getDirectory();
我當前打開文件的方法是
FolderOpener opener = new FolderOpener();
ImagePlus imp = opener.openFolder(filePath);
ImageStack stack = imp.getImageStack();
這可行,但是對於較大的文件夾,這會使插件的運行時間增加4或5分鍾。 雖然我知道打開大文件夾顯然會花費更多時間,但是如果我可以減少一點的話,那將是很好的。
我正在嘗試實現的方法是
File folder = new File(filePath);
String[] listOfFiles = Folder.list();
Arrays.sort(listOfFiles); // to make sure the stack is in the right order
通過使用Arrays.copyOfRange將listOfFiles拆分(為參數着想,分成3個),並將其傳遞給擴展Thread的對象
openFolder r1 = new openFolder(listOfFiles_part1);
openFolder r2 = new openFolder(listOfFiles_part2);
openFolder r3 = new openFolder(listOfFiles_part3);
new Thread(r1).start();
new Thread(r2).start();
new Thread(r3).start();
openFolder的方法使用listOfFiles_part從文件中形成ImagePlus實例的數組
int len = Array.getLength(listOfFiles_part)
ImagePlus[] impArray = new ImagePlus[len];
for (int a = 0; a < len; a++ ) {
impArray[a] = new ImagePlus((listOfFiles_part[a]).getPath());
}
然后,返回impArrays,並從數組中形成一個ImageStack。
但是,這似乎有點讓人費解,到目前為止,我還沒有實現太多的運氣。
有沒有更好的方法來使用線程從文件夾中獲取ImageStack? (使用線程是否還會加快進程?)
任何幫助,將不勝感激。 干杯
有一種以上的方法。 如果您使用Java 8,則並行方法更簡單
List<ImagePlus> impArray = new ArrayList<ImagePlus>();
listOfFiles_part.parallelStream()
.forEachOrdered(i -> impArray.add(new ImagePlus(i.getPath()));
否則,您可能會使用線程池,因為您不知道取決於硬件的優化線程數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.