Package google.type

Indeks

Kolor

Reprezentuje kolor w przestrzeni kolorów RGBA. Ta reprezentacja została zaprojektowana z myślą o ułatwieniu konwertowania do i z reprezentacji kolorów w różnych językach na potrzeby złożoności. Na przykład pola tej reprezentacji można w prosty sposób przekazać do konstruktora java.awt.Color w języku Java; można je też w prosty sposób podać w metodzie +colorWithRed:green:blue:alpha UIColor w iOS, a przy odrobinie pracy można je też łatwo sformatować jako ciąg CSS rgba() w JavaScript.

Na tej stronie referencyjnej nie ma informacji o bezwzględnej przestrzeni kolorów, która powinna zostać użyta do zinterpretowania wartości RGB, np. sRGB, Adobe RGB, DCI-P3 i BT.2020. Domyślnie aplikacje powinny używać przestrzeni kolorów sRGB.

Gdy trzeba określić równość kolorów, implementacje (o ile nie udokumentowano inaczej), traktuj 2 kolory tak samo, jeśli wszystkie ich wartości czerwone, zielony, niebieski i alfa różnią się maksymalnie o 1e-5.

Przykład (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();
 }
 // ...

Przykład (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;
}
// ...

Przykład (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('');
};

// ...
Pola
red

float

Ilość czerwieni w kolorze jako wartość w przedziale [0, 1].

green

float

Ilość koloru zielonego w kolorze jako wartość przedziału [0, 1].

blue

float

Ilość koloru niebieskiego jako wartość w przedziale [0, 1].

alpha

FloatValue

Odsetek tego koloru, jaki ma zostać zastosowany do piksela. Ostateczny kolor w pikselach jest określany przez równanie:

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

Oznacza to, że wartość 1,0 odpowiada jednolitego koloru, a wartość 0,0 odpowiada kolorowi całkowicie przezroczystemu. Korzysta ono z komunikatu opakowania, a nie prostego skalarnego zmiennoprzecinkowego, co pozwala odróżnić wartość domyślną od nieskonfigurowanej wartości. Jeśli go pominiesz, ten obiekt koloru będzie miał jednolity kolor (tak jakby wartość alfa otrzymała wyraźnie wartość 1,0).

Odstęp

Reprezentuje przedział czasu zakodowany jako początek sygnatury czasowej (włącznie) i koniec sygnatury czasowej (bez wartości).

Początek nie może być dłuższy niż koniec. Jeśli początek równa się końca, interwał jest pusty (nie pasuje do czasu). Jeśli początek i koniec nie są określone, interwał może występować w dowolnym czasie.

Pola
start_time

Timestamp

Opcjonalnie. Początek interwału włączający.

Jeśli zostanie określona, sygnatura czasowa pasująca do tego interwału musi być taka sama jak data rozpoczęcia lub późniejsza.

end_time

Timestamp

Opcjonalnie. Wyłączny koniec przedziału.

Jeśli zostanie podany, sygnatura czasowa pasująca do tego interwału musi przypadać przed końcem.

LatLng

Obiekt reprezentujący parę szerokości i długości geograficznej. Wartość ta jest wyrażana jako para podwójnej wartości reprezentującej stopnie szerokości i długości geograficznej w stopniach. O ile nie wskazano inaczej, ten obiekt musi być zgodny ze standardem WGS84. Wartości muszą mieścić się w znormalizowanych zakresach.

Pola
latitude

double

Szerokość geograficzna w stopniach. Musi mieścić się w zakresie [-90,0; +90,0].

longitude

double

Długość geograficzna w stopniach. Musi mieścić się w zakresie [-180,0; +180,0].