处理如何从颜色集合中获取最接近的颜色

问题描述 投票:1回答:3

我有Collection of Integers处理颜色(它包含重新缩放为1x1以获得“平均”颜色的图像颜色)。我有这个东西,必须检索我最接近数组的颜色:

public static int getNearestColor(Collection<Integer> colors, int color) {
    return colors.stream()
        .min(Comparator.comparingInt(i -> Math.abs(i - color)))
        .orElseThrow(() -> new NoSuchElementException("No value present"));
}

但是,当我这样做时,它返回的颜色比输入的颜色更远[[远]],但是数组包含的颜色比输入的颜色更接近,this是我的问题,我不知道不明白吗?

我有一个处理颜色整数集合(它包含重新缩放为1x1以获得“平均”颜色的图像颜色)。我有这个东西必须检索我最接近数组的颜色:...
java arrays colors processing
3个回答
1
投票
color()的RGB颜色通道在color()中编码。您可以通过intred()red()提取颜色的红色,绿色和蓝色分量。将颜色通道视为3维向量(green()),并通过green()计算2个颜色向量的blue()。 “距离”最短的颜色是“最近”的颜色:

0
投票
java中的数组没有流方法;也许您的意思是dist()c1除了自然顺序外,没有其他方法可以进行比较。您可以先映射到差异(c2),但是现在您已删除了要查找的信息(原始颜色),因此也将不起作用。装箱吧。这将导致以下代码,该代码与您的代码完全一样,只不过此代码可以编译和运行。然后,我还将添加一个测试用例,使其成为一个独立的示例:

0
投票
float ColorDistance(int c1, int c2) { return PVector.dist( new PVector(red(c1), green(c1), blue(c1)), new PVector(red(c2), green(c2), blue(c2))); }
© www.soinside.com 2019 - 2024. All rights reserved.