Существует ли простой способ выдержать сравнение, как близко два цвета друг другу?

Есть две проблемы. Учебное пособие импортирует Product следующим образом:

import Product from './Product.js';

, но затем учебное пособие ссылается на него позже как <product, когда оно должно быть <Product.

Вторая проблема заключается в том, что закрывающий тег Product </product> должен быть либо внутри оператора return вместе с открытым тегом Product, либо просто использовать самозакрывающийся тег, подобный этому: [ 1111]

{productsToDisplay.edges.map((el, i)=> {
    return(
        <Product key="{i}" product="{el.node}" />
    ) 
})}

Таким образом, ваш полный оператор возврата должен выглядеть следующим образом:

return (
  <div classname="App">
    <div classname="products-grid">
      {productsToDisplay.edges.map((el, i)=> {
        return(
          <Product key="{i}" product="{el.node}" />
        )
      })}
    </div>
  </div>
);

Кредиты @RyanCogswell за то, что они обратили внимание на другую проблему с заглавной буквой P в <products>. [1113 ]

26
задан martineau 22 September 2019 в 19:23
поделиться

3 ответа

Вы, вероятно, хотите преобразовать цвета в модель HSL (Оттенок, Насыщенность, Легкость) и затем сравнить значения в порогах в порядке HSL. Если оттенок в рамках допуска, который считают как "близко", то проверьте "близость" насыщенности и затем легкость.

21
ответ дан Jeff Yates 28 November 2019 в 07:25
поделиться

Я не уверен ни в каких алгоритмах, можно хотеть считать преобразование RGB (Красный, Зеленый, Синий) значения в к HSB (Оттенок, Насыщенность, Яркость).

Оттенок является по существу "цветом", таким образом, можно выдержать сравнение просто о том, как близко значения Оттенка.

См. http://en.wikipedia.org/wiki/HSV_color_space

9
ответ дан nicholaides 28 November 2019 в 07:25
поделиться

Я знаю, что этому вопросу 10 лет, но ответ расширяющегося Joe Zack:

Вот мой код Kotlin

//Entry point here
//Color must be hexa for example "#829381"
fun calculateColorDistance(colorA: String, colorB: String): Double {
    val aColorRGBArray = getColorRGBArray(colorA)
    val bColorRGBArray = getColorRGBArray(colorB)
    val aColorLAB = getColorLab(aColorRGBArray)
    val bColorLAB = getColorLab(bColorRGBArray)
    return calculateColorDistance(aColorLAB, bColorLAB)
}

private fun calculateColorDistance(aColorLAB: DoubleArray, bColorLAB: DoubleArray): Double {
    val lab = aColorLAB[0] - bColorLAB[0]
    val aab = aColorLAB[1] - bColorLAB[1]
    val bab = aColorLAB[2] - bColorLAB[2]
    val sqrtlab = lab.pow(2)
    val sqrtaab = aab.pow(2)
    val sqrtbab = bab.pow(2)

    val sum = sqrtlab + sqrtaab + sqrtbab
    return sqrt(sum)
}

private fun getColorRGBArray(color: String): IntArray {
    val cleanColor = color.replace("#", "")
    val colorInt = Integer.parseInt(cleanColor, 16)
    val r = Color.red(colorInt)
    val g = Color.green(colorInt)
    val b = Color.blue(colorInt)
    return intArrayOf(r, g, b)
}

private fun getColorLab(colorRGB: IntArray): DoubleArray {
    val outLab = doubleArrayOf(0.0,0.0,0.0)
    ColorUtils.RGBToLAB(colorRGB[0], colorRGB[1], colorRGB[2], outLab)
    return outLab
}

calculateColorDistance, возвратит Двойное значение. чем ниже это значение, тем более подобны цвета.

Hope это помогает кому-то

1
ответ дан 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: