Преобразование HSL в RGB (Microsoft Excel)
Басселу нужна формула, которая может преобразовывать значения цвета HSL (значения оттенка, насыщенности и яркости) в значения цвета RGB (значения красного, синего и зеленого). Он задается вопросом, может ли кто-нибудь указать ему либо на формулу рабочего листа, которая сделает это, либо на способ сделать это в макросе.
Преобразование значений HSL в RGB — нетривиальная задача. Для тех, кто интересуется математикой, стоящей за этим, вы можете проверить статью в Википедии по этой теме.
Если вам нужно выполнять преобразование нечасто, самый простой способ — выполнить следующие действия:
-
Откройте вкладку «Главная» на ленте.
-
Щелкните стрелку вниз справа от инструмента «Цвет заливки» в группе «Шрифт». Excel отображает небольшую палитру цветов и некоторые другие параметры.
-
Выберите больше цветов. Excel отображает диалоговое окно «Цвета».
-
Убедитесь, что отображается вкладка Custom.
-
В раскрывающемся списке «Цветовая модель» выберите HSL. (См. Рис. 1.)
-
Внизу диалогового окна вы можете увидеть отдельные значения для Hue, Sat и Lum. Измените эти значения на все, что захотите.
-
В раскрывающемся списке Цветовая модель выберите RGB. Значения, отображаемые в нижней части диалогового окна, являются значениями HSL (введенными на шаге 6)
преобразован в RGB.
-
По завершении нажмите Отмена.
Этот подход предполагает, что каждое из ваших значений HSL может быть выражено в диапазоне от 0 до 255. Если, однако, ваши значения HSL представляют собой угол (для оттенка) или процент (для насыщенности и яркости), тогда вам понадобится чтобы преобразовать их вручную перед вводом на шаге 6. Вы можете преобразовать значение угла, умножив угол на 255 и затем разделив на 360.
Проценты можно преобразовать, умножив их на 2,55.
Если вам нужно получать значения чаще, тогда поможет создание вашей собственной пользовательской функции для преобразования. В следующем примере принимаются три параметра (Hue, Saturation и Luminance) и возвращается строка, содержащая десятичные значения RGB, разделенные запятыми.
Function HSLtoRGB(Hue As Integer, Saturation As Integer, _ Luminance As Integer) As String Dim r As Integer Dim g As Integer Dim b As Integer Dim C As Double Dim X As Double Dim m As Double Dim rfrac As Double Dim gfrac As Double Dim bfrac As Double Dim hangle As Double Dim hfrac As Double Dim sfrac As Double Dim lfrac As Double If (Saturation = 0) Then r = 255 g = 255 b = 255 Else lfrac = Luminance / 255 hangle = Hue / 255 360 sfrac = Saturation / 255 C = (1 - Abs(2 lfrac - 1)) sfrac hfrac = hangle / 60 hfrac = hfrac - Int(hfrac / 2) 2 'fmod calc X = (1 - Abs(hfrac - 1)) C m = lfrac - C / 2 Select Case hangle Case Is < 60 rfrac = C gfrac = X bfrac = 0 Case Is < 120 rfrac = X gfrac = C bfrac = 0 Case Is < 180 rfrac = 0 gfrac = C bfrac = X Case Is < 240 rfrac = 0 gfrac = X bfrac = C Case Is < 300 rfrac = X gfrac = 0 bfrac = C Case Else rfrac = C gfrac = 0 bfrac = X End Select r = Round((rfrac + m) 255) g = Round((gfrac + m) * 255) b = Round((bfrac + m) * 255) End If HSLtoRGB = Str(r) & "," & Str(g) & "," & Str(b) End Function
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13535) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.