Ответы пользователя по тегу Работа с цветом
  • Алгоритм перевода RGB-компонент в длину волны?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Длина волны в RGB.
    Взято из https://www.johndcook.com/wavelength_to_RGB.html
    const w = 640 // Длина волны
    let red, green, blue;
    
    if (w < 380 || w > 781) {
      [red, gren, blue] = [0, 0, 0];
    } else if (w < 440) {
      [red, green, blue] = [(440 - w) / 60, 0, 1];
    } else if (w < 490) {
      [red, green, blue] = [0, (w - 440) / 50, 1];
    } else if (w < 510) {
      [red, green. blue] = [0, 1, (510 - w) / 20];
    } else if (w < 580) {
      [red, green, blue] = [(w - 510) / 70, 1, 0];
    } else if (w < 645) {
      [red, green, blue] = [1, (645 - w) / 65, 0];
    } else {
      [red, green, blue] = [1, 0, 0];
    }
    
    let factor;
    if (w < 380 || w > 781) {
      factor = 0;
    } else if (w < 420) {
      factor = 0.3 + 0.7 * (w - 380) / 40;
    } else if (w < 701) {
      factor = 1.0;
    } else {
      factor = 0.3 + 0.7 * (780 - w) / 80;
    }
    
    const gamma = 0.8;
    
    const R = (red > 0 ? 255 * Math.pow(red * factor, gamma) : 0);
    const G = (green > 0 ? 255 * Math.pow(green * factor, gamma) : 0);
    const B = (blue > 0 ? 255 * Math.pow(blue * factor, gamma) : 0);
    
    const color = `rgb(${R}, ${G}, ${B})`;
    console.log(color); // rgb(255, 32.763138565028974, 0)
    Ответ написан
    4 комментария
  • Как узнать исходные цвета на черно-белом изображении, если известен точный цвет отдельных объектов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Перевод из RGB в Grayscale - это необратимая функция. Например, в телевизионном стандарте CCIR-601 она задана как Y = 0.299R + 0.587G + 0.114B, а в sRGB как Y = 0.2126R + 0.7152G + 0.0722B.
    Ответ написан
    Комментировать
  • Нахождение найменьшего значения RGB?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Чёрно-белое изображение имеет два цвета - чёрный и белый.
    Изображение в оттенках серого имеет один канал.
    Если у вас три канала (RBG) - то это полноцветное изображение.
    Яркость (или светимость) точки можно посчитать по одной из формул, в зависимости от цветовой модели:
    L = 0.2126 * R + 0.7152 * G + 0.0722 * B
    L = 0.299 * R + 0.587 * G + 0.114 * B
    L = sqrt(0.299 * R * R + 0.587 * G * G + 0.114 * B * B)
    Ответ написан
    Комментировать
  • Как создать N-последовательность взаимно-контрастных цветов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Самое надёжное - брать из заранее подготовленного набора цветов. Если хочется именно генерировать, то попробуйте использовать цветовой круг. На противоположных сторонах круга находятся взаимно контрастные цвета. Если взять нечётное (для простоты алгоритма) количество цветов N = 2n+1, то сдвигаясь на каждом шаге на 360*n/N градусов по кругу будем получать цвет, контрастный к предыдущему.
    Ответ написан
    Комментировать
  • Почему ноутбук и монитор один и тот же цвет отображают по-разному?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Чтобы совсем правильно - нужно проводить цветокалибровку каждого монитора. Но этим обычно занимаются полиграфисты, им надо видеть то, что потом получится на бумаге (сканеры и принтеры они тоже калибруют). Разработчику сайтов или ПО надо помнить, что мониторы у пользователей разные, и дизайн продукта не должен зависеть от небольших искажений цветопередачи.
    Ответ написан
    2 комментария