OpenXML Scheme Color Transformations - تطبيق و
سؤال
عند معالجة مستند XML مفتوحًا ، يمكن أن يكون للألوان تحويلات مختلفة لتطبيقها على لون أساسي لإنشاء لون نسبي. على سبيل المثال <a:satMod value="25000">
من شأنه تعديل تشبع الألوان الأساسية بنسبة 25 ٪. هناك نوعان من التحويلات تمكنت من العثور على القليل من المعلومات حولهما وهما:
<a:gamma>
تقول المستندات "هذا العنصر يحدد أن لون الإخراج الذي يتم تقديمه بواسطة تطبيق توليد يجب أن يكون تحول Gamma SRGB من لون الإدخال."
و
<a:invGamma>
تقول المستندات "هذا العنصر يحدد أن لون الإخراج الذي يتم تقديمه بواسطة تطبيق توليد يجب أن يكون تحول Gamma SRGB العكسي من لون الإدخال."
أود أن أفهم ما هو الحساب الذي يجب علي القيام به على اللون الأساسي لتحويله باستخدام أي من هذه التحولات. هل احسب أي شخص هذا؟
المحلول
نعم. ببساطة،
<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 لبناء لونك.