Схема цветовых преобразований OpenXML - применениеа также - PullRequest
3 голосов
/ 23 октября 2010

При обработке открытого XML-документа цвета могут иметь различные преобразования, примененные к базовому цвету, для создания относительного цвета.Например, <a:satMod value="25000"> изменил бы насыщенность основных цветов на 25%.Есть два преобразования, о которых я смог найти очень мало информации, и они:

<a:gamma> 

Документы говорят: «Этот элемент указывает, что выходной цвет, отображаемый генерирующим приложением, должен быть гамма-сдвигом sRGBвходной цвет. "

и

<a:invGamma>

В документах сказано:" Этот элемент указывает, что выходной цвет, отображаемый приложением генерирования, должен быть обратным гамма-сдвигом sRGB входного цвета. "

Я хотел бы понять, какие вычисления мне нужно будет выполнить для базового цвета, чтобы преобразовать его с помощью любого из этих преобразований.Кто-нибудь понял это?

1 Ответ

2 голосов
/ 23 октября 2010

Да.Проще говоря,

  • <a:gamma> просто означает взять значение sRGB (шкала 0-1) и линеаризовать его (преобразовать в линейный RGB).Возьмите эти линейные значения RGB и сохраните их как sRGB (и конвертируйте в диапазон 0–255, если хотите).
  • <a:invGamma> - наоборот - возьмите линейное значение RGB (шкала 0–1) и разграничите его(преобразовать в sRGB).Возьмите эти линеаризованные значения RGB и сохраните их как sRGB (и конвертируйте в диапазон 0-255, если хотите).

Так что же такое линейный RGB?Вычисление здесь на странице sRGB Википедии .

Вот также версия VBA:

Public Function sRGB_to_linearRGB(value As Double) 
   If value < 0# Then 
      sRGB_to_linearRGB = 0# 
      Exit Function 
   End If 
   If value <= 0.04045 Then 
      sRGB_to_linearRGB = value / 12.92 
      Exit Function 
   End If 
   If value <= 1# Then 
      sRGB_to_linearRGB = ((value + 0.055) / 1.055) ^ 2.4 
      Exit Function 
   End If 
   sRGB_to_linearRGB = 1# 
End Function 

Public Function linearRGB_to_sRGB(value As Double) 
   If value < 0# Then 
      linearRGB_to_sRGB = 0# 
      Exit Function 
   End If 
   If value <= 0.0031308 Then 
      linearRGB_to_sRGB = value * 12.92 
      Exit Function 
   End If 
   If value < 1# Then 
      linearRGB_to_sRGB = 1.055 * (value ^ (1# / 2.4)) - 0.055 
      Exit Function 
   End If 
   linearRGB_to_sRGB = 1# 
End Function 

value, который вы передаете, это R, G,Компонент B в диапазоне 0-1, либо sRGB, либо линейный RGB.Вы получите тот же диапазон обратно, 0-1, и, в зависимости от ваших потребностей, вы можете затем преобразовать в диапазон 0-255, чтобы построить свой цвет.

...