有没有办法在 Javafx 中获取图像的最主要颜色

Is there a way to get the most dominant color of an image in Javafx

我正在尝试构建一个应用程序,我需要我的 vbox 的背景与附加到它的图像的最主要颜色相同,现在我正在处理随机图像,所以我需要我的程序是这个自己能算出来。 请任何建议

是的,但是没有好的方法。

此代码并不完美(我在 phone 上),但请考虑以下代码:

// Read the image.

final InputStream is = new FileInputStream("Path\To\Image");
final Image img = new Image(is);

// Read through the pixels and count the number of occurrences of each color.

final PixelReader pr = img.getPixelReader();
final Map<Color, Long> colCount = new HashMap<>();

for(int x = 0; x < img.getWidth(); x++) {
  for(int y = 0; y < img.getHeight(); y++) {
    final Color col = pr.getColor(x, y);
    if(colCount.containsKey(col)) {
      colCount.put(col, colCount.get(col) + 1);
    } else {
      colCount.put(col, 1L);
    }
  }
}

// Get the color with the highest number of occurrences .

final Color dominantCol = colCount.entrySet().stream().max(Map.Entry.comparingByValue()).get().getKey();

编辑 1:

您可能想要实施某种形式的阈值方法。例如,您可以将每种颜色分类为红色、绿色或蓝色(在实际应用中您需要更多的色调范围)。然后,使用匹配最多的范围的平均值或中值。