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