Package google.type

Index

Color

Représente une couleur dans l'espace colorimétrique RVBA. Cette représentation est conçue pour simplifier la conversion vers et depuis des représentations de couleurs dans plusieurs langages plutôt que dans un format compact. Par exemple, les champs de cette représentation peuvent être facilement fournis au constructeur de java.awt.Color en Java. Ils peuvent également être facilement fournis à la méthode +colorWithRed:green:blue:alpha de UIColor dans iOS. Et, avec un peu de travail, il peut être facilement formaté en une chaîne CSS rgba() en JavaScript.

Cette page de référence ne contient pas d'informations sur l'espace colorimétrique absolu à utiliser pour interpréter la valeur RVB (par exemple, sRVB, Adobe RVB, DCI-P3 et BT.2020). Par défaut, les applications doivent supposer l'espace colorimétrique sRVB.

Lorsque l'égalité des couleurs doit être décidée, les implémentations, sauf indication contraire, traitent deux couleurs comme égales si toutes leurs valeurs rouge, verte, bleue et alpha diffèrent chacune de 1e-5 au maximum.

Exemple (Java) :

 import com.google.type.Color;

 // ...
 public static java.awt.Color fromProto(Color protocolor) {
   float alpha = protocolor.hasAlpha()
       ? protocolor.getAlpha().getValue()
       : 1.0;

   return new java.awt.Color(
       protocolor.getRed(),
       protocolor.getGreen(),
       protocolor.getBlue(),
       alpha);
 }

 public static Color toProto(java.awt.Color color) {
   float red = (float) color.getRed();
   float green = (float) color.getGreen();
   float blue = (float) color.getBlue();
   float denominator = 255.0;
   Color.Builder resultBuilder =
       Color
           .newBuilder()
           .setRed(red / denominator)
           .setGreen(green / denominator)
           .setBlue(blue / denominator);
   int alpha = color.getAlpha();
   if (alpha != 255) {
     result.setAlpha(
         FloatValue
             .newBuilder()
             .setValue(((float) alpha) / denominator)
             .build());
   }
   return resultBuilder.build();
 }
 // ...

Exemple (iOS/Obj-C) :

 // ...
 static UIColor* fromProto(Color* protocolor) {
    float red = [protocolor red];
    float green = [protocolor green];
    float blue = [protocolor blue];
    FloatValue* alpha_wrapper = [protocolor alpha];
    float alpha = 1.0;
    if (alpha_wrapper != nil) {
      alpha = [alpha_wrapper value];
    }
    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
 }

 static Color* toProto(UIColor* color) {
     CGFloat red, green, blue, alpha;
     if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
       return nil;
     }
     Color* result = [[Color alloc] init];
     [result setRed:red];
     [result setGreen:green];
     [result setBlue:blue];
     if (alpha <= 0.9999) {
       [result setAlpha:floatWrapperWithValue(alpha)];
     }
     [result autorelease];
     return result;
}
// ...

Exemple (JavaScript) :

// ...

var protoToCssColor = function(rgb_color) {
   var redFrac = rgb_color.red || 0.0;
   var greenFrac = rgb_color.green || 0.0;
   var blueFrac = rgb_color.blue || 0.0;
   var red = Math.floor(redFrac * 255);
   var green = Math.floor(greenFrac * 255);
   var blue = Math.floor(blueFrac * 255);

   if (!('alpha' in rgb_color)) {
      return rgbToCssColor(red, green, blue);
   }

   var alphaFrac = rgb_color.alpha.value || 0.0;
   var rgbParams = [red, green, blue].join(',');
   return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
};

var rgbToCssColor = function(red, green, blue) {
  var rgbNumber = new Number((red << 16) | (green << 8) | blue);
  var hexString = rgbNumber.toString(16);
  var missingZeros = 6 - hexString.length;
  var resultBuilder = ['#'];
  for (var i = 0; i < missingZeros; i++) {
     resultBuilder.push('0');
  }
  resultBuilder.push(hexString);
  return resultBuilder.join('');
};

// ...
Champs
red

float

Quantité de rouge dans la couleur en tant que valeur dans l'intervalle [0, 1].

green

float

Quantité de vert dans la couleur en tant que valeur dans l'intervalle [0, 1].

blue

float

Quantité de bleu dans la couleur en tant que valeur dans l'intervalle [0, 1].

alpha

FloatValue

Fraction de cette couleur à appliquer au pixel. En d'autres termes, la couleur finale du pixel est définie par l'équation :

pixel color = alpha * (this color) + (1.0 - alpha) * (background color)

Cela signifie qu'une valeur de 1,0 correspond à une couleur solide, tandis qu'une valeur de 0,0 correspond à une couleur complètement transparente. Un message wrapper est utilisé à la place d'une simple valeur scalaire flottante afin qu'il soit possible de distinguer une valeur par défaut de la valeur non définie. S'il est omis, cet objet couleur est rendu en tant que couleur unie (comme si la valeur alpha avait été explicitement affectée à la valeur 1.0).

Intervalle

Représente un intervalle de temps, encodé en tant que début d'horodatage (inclus) et fin d'horodatage (exclusif).

Le début doit être inférieur ou égal à la fin. Lorsque le début est égal à la fin, l'intervalle est vide (ne correspond à aucune heure). Si le début et la fin ne sont pas spécifiés, l'intervalle correspond à n'importe quelle heure.

Champs
start_time

Timestamp

Facultatif. Début de l'intervalle inclusif.

Si cet intervalle est spécifié, un code temporel correspondant à cet intervalle doit être identique ou ultérieur au début.

end_time

Timestamp

Facultatif. Fin exclusive de l'intervalle.

Si cet intervalle est spécifié, un code temporel correspondant à cet intervalle doit être situé avant la fin.

LatLng

Objet représentant une paire latitude/longitude. Cette valeur est exprimée par deux valeurs doubles représentant les degrés de latitude et de longitude. Sauf indication contraire, cet objet doit être conforme à la norme WGS84. Les valeurs doivent se situer dans les limites normalisées.

Champs
latitude

double

Latitude en degrés. Elle doit être comprise dans la plage [-90.0, +90.0].

longitude

double

Longitude en degrés. Elle doit être comprise dans la plage [-180.0, +180.0].