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つのリストに分けることができれば、それらは4分の1部分または元のリストを持ちます。これらはそれぞれ1つのコアで実行できます。すべてが終了します.4つの画像を1つにマージできます。しかし、私はそれをする方法は分かりません...だからあなたの誰かがそれを行う方法を知っていれば私を見せてください:D

Thxと私のために申し訳ありません。

+1

必要な部分あなたが行うにはどのように任意のアイデアを持っていないた

allExistingName.parallelStream().forEach(name -> { BufferedImage overlay = images.get(name); g.drawImage(overlay, 0, 0, null); }); ImageIO.write(combined, "PNG", new File(folder, "MERGE.PNG")); 

を絶食を動作します。それのすべて?インデックスを作成してリストを分割できますか? – ChiefTwoPencils

+0

スレッドを使ってそれを行う方法がわかりません...インターネットで検索しています...しかしスレッドでそれを行う方法については何も解決していません。 – cavaler12345

+0

あなたは必要ありませんスレッドを使用してリストを分割する4つのスレッドを作成する前にそれをしたいと思うでしょう。次に、共有リストへの参照とスレッドが担当するインデックスを渡します。それはあまりにも広いので、おそらくここでは複数の質問があります。 – ChiefTwoPencils

答えて

0

解決するには、本当に簡単だった、私はちょうどparallelStreamを使用する必要があり、すべてが非常にすべての私は

関連する問題