2010-10-22 11 views
3

Lors du traitement d'un document xml ouvert, les couleurs peuvent avoir différentes transformations appliquées à une couleur de base pour générer une couleur relative. Par exemple <a:satMod value="25000"> modifierait la saturation des couleurs de base de 25%. Il y a deux transformations que j'ai pu trouver très peu d'informations sur et ils sont:Transformations de couleurs de schéma OpenXML - application de <a:gamma> et <a:invgamma>

<a:gamma> 

Les docs disent « Cet élément indique que la couleur de sortie rendu par l'application de production devrait être le changement gamma sRGB de l'entrée Couleur."

et

<a:invGamma> 

Les documents disent « Cet élément spécifie que la couleur de sortie rendu par l'application de génération doit être le décalage inverse sRGB gamma de la couleur d'entrée. »

Je voudrais comprendre quel calcul je devrais faire sur la couleur de base pour le transformer en utilisant l'une de ces transformations. Est-ce que quelqu'un a compris cela?

Répondre

2

Oui. En termes simples,

  • <a:gamma> signifie simplement de prendre la valeur sRGB (0-1 échelle) et linéariser (convertir en RGB linéaire). Prenez ces valeurs RVB linéaires et enregistrez-les en tant que sRGB (et convertissez en plage 0-255 si vous le souhaitez). Est l'inverse - prenez la valeur RGB linéaire (échelle 0-1) et délinégez-la (convertissez en sRGB). Prenez ces valeurs RVB délinéées et enregistrez-les en tant que sRGB (et convertissez à la gamme 0-255 si vous voulez).

Alors, qu'est-ce que le RGB linéaire? Le calcul est here on Wikipedia's sRGB page.

est ici aussi une version 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 

Le value que vous passez est le R, G, composant B dans 0-1 plage, sRGB ou RGB linéaire. Vous recevrez la même plage, de 0 à 1, et en fonction de vos besoins, vous pourrez ensuite convertir en plage 0-255 pour construire votre couleur.

+0

ok, merci Otaku. –