有没有办法在 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:
您可能想要实施某种形式的阈值方法。例如,您可以将每种颜色分类为红色、绿色或蓝色(在实际应用中您需要更多的色调范围)。然后,使用匹配最多的范围的平均值或中值。
我正在尝试构建一个应用程序,我需要我的 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:
您可能想要实施某种形式的阈值方法。例如,您可以将每种颜色分类为红色、绿色或蓝色(在实际应用中您需要更多的色调范围)。然后,使用匹配最多的范围的平均值或中值。