1
我需要一個函數如何能夠建立一個基於多重合並的圖像。所以我做這個如何使圖像處理使用所有的CPU核心
public static void mergeImagesByName(List<String> names) {
File folder;
File[] listOfFiles;
List<String> allFilesName;
folder = new File("images/");
listOfFiles = folder.listFiles();
allFilesName = new ArrayList<>();
for (File fileName : listOfFiles) {
allFilesName.add(fileName.getName());
}
List<String> imgName = names.stream().map(name -> name += ".PNG").collect(Collectors.toList());
List<String> allExistingName = new ArrayList<>();
allFilesName.stream().forEach((file) -> imgName.stream().filter((name) -> (file.equals(name))).forEach((name) -> allExistingName.add(name)));
try {
File baseImage = new File(folder, "MERGE.PNG");
BufferedImage textImage = ImageIO.read(new File(folder, "Text.PNG"));
BufferedImage image = ImageIO.read(baseImage);
int w = 800;
int h = 450;
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics g = combined.getGraphics();
g.drawImage(image, 0, 0, null);
for (String name : allExistingName) {
BufferedImage overlay = ImageIO.read(new File(folder, name));
g.drawImage(overlay, 0, 0, null);
ImageIO.write(combined, "PNG", new File(folder, "MERGE.PNG"));
}
g.drawImage(textImage, 0, 0, null);
} catch (IOException ex) {
Logger.getLogger(MergeImages.class
.getName()).log(Level.SEVERE, null, ex);
}
} 但它是慢了什麼,我需要...我需要幾乎5-8sec執行我的所有圖像和創造的結果。所以我在想......如果我會讓它在多核同時運行,這會提高我的速度。例如..我有4個核心,如果我可以將我原來的元素列表分成4個列表,並且他們將只有四分之一部分或原始列表,這些可以在一個核心上運行它們中的每一個,並且在之後所有將完成我可以合併一個4只圖像。但我不知道該怎麼做......所以請大家,如果你們中的任何人知道如何做到這一點,請告訴我:D
Thx對不起我英語不好。
你沒有哪一部分的任何想法怎麼辦;所有的?你能否通過建立索引來劃分列表? – ChiefTwoPencils
我不知道如何使用線程來做到這一點...我在互聯網上搜索配置...但我找不到任何有關如何與線程做到這一點的解決方案.. – cavaler12345
你不需要使用線程來分割列表。在創建四個線程之前,你需要這樣做。然後你會傳遞一個對共享列表和線程負責的索引的引用。你可能在這裏有不止一個問題,因爲它太寬泛了。 – ChiefTwoPencils