3

開いている xml ドキュメントを処理する場合、色にさまざまな変換をベース カラーに適用して、相対カラーを生成できます。たとえば<a:satMod value="25000">、ベース カラーの彩度を 25% 変更します。私がほとんど情報を見つけることができなかった2つの変換があり、それらは次のとおりです。

<a:gamma> 

ドキュメントには、「この要素は、生成アプリケーションによってレンダリングされる出力カラーが入力カラーの sRGB ガンマ シフトであることを指定する」と記載されています。

<a:invGamma>

ドキュメントには、「この要素は、生成アプリケーションによってレンダリングされる出力カラーが入力カラーの逆 sRGB ガンマ シフトであることを指定する」と記載されています。

これらの変換のいずれかを使用してベースカラーを変換するために、ベースカラーに対してどのような計算を行う必要があるかを理解したいと思います。誰かがこれを理解しましたか?

4

1 に答える 1

2

うん。簡単に言えば、

  • <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は、sRGBまたはリニアRGBのいずれかの0-1範囲のR、G、Bコンポーネントです。同じ範囲である0-1を受け取り、必要に応じて0〜255の範囲に変換して色を作成できます。

于 2010-10-22T23:31:49.237 に答える