Index
Color
Ermöglicht die Darstellung einer Farbe im RGBA-Farbraum. Diese Darstellung ist auf die einfache Konvertierung in und aus Farbdarstellungen in verschiedenen Sprachen statt auf Kompaktheit ausgelegt. Die Felder dieser Darstellung können beispielsweise einfach dem Konstruktor von java.awt.Color
in Java bereitgestellt werden. Sie kann auch einfach über die Methode +colorWithRed:green:blue:alpha
von UIColor in iOS bereitgestellt werden. Außerdem lässt er sich mit wenig Aufwand in JavaScript als CSS-String rgba()
formatieren.
Diese Referenzseite enthält keine Informationen zum absoluten Farbraum, der zur Interpretation des RGB-Werts verwendet werden sollte, z. B. sRGB, Adobe RGB, DCI-P3 und BT.2020. Standardmäßig sollte in Anwendungen der sRGB-Farbraum verwendet werden.
Wenn die Farbgleichheit beschlossen werden muss, werden Implementierungen, sofern nicht anders angegeben, zwei Farben als gleich behandelt, wenn sich alle ihre Rot-, Grün-, Blau- und Alphawerte um höchstens 1e-5
unterscheiden.
Beispiel (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();
}
// ...
Beispiel (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;
}
// ...
Beispiel (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('');
};
// ...
Felder | |
---|---|
red |
Der Rotanteil der Farbe als Wert im Intervall [0, 1]. |
green |
Der Grünanteil der Farbe als Wert im Intervall [0, 1]. |
blue |
Der Blauanteil der Farbe als Wert im Intervall [0, 1]. |
alpha |
Der Anteil dieser Farbe, der auf den Pixel angewendet werden soll. Die endgültige Pixelfarbe wird durch folgende Gleichung definiert:
Der Wert 1,0 entspricht einer soliden Farbdarstellung, während die Farbe bei einem Wert von 0,0 vollständig transparent ist. Dabei wird anstelle eines einfachen Float-Skalarwerts eine Wrapper-Nachricht verwendet, sodass zwischen einem Standardwert und dem zurückgesetzten Wert unterschieden werden kann. Wenn keine Angabe gemacht wird, wird dieses Farbobjekt als Volltonfarbe gerendert, so als ob dem Alphawert explizit der Wert 1,0 zugewiesen worden wäre. |
Intervall
Stellt ein Zeitintervall dar, das als Zeitstempelstart (einschließlich) und als Zeitstempelende (ausschließlich) codiert ist.
Der Beginn muss kleiner oder gleich dem Ende sein. Wenn der Startwert mit dem Ende übereinstimmt, ist das Intervall leer (entspricht keiner Zeit). Wenn sowohl Start als auch Ende nicht angegeben sind, entspricht das Intervall einer beliebigen Zeit.
Felder | |
---|---|
start_time |
Optional. Inklusiver Start des Intervalls. Wenn angegeben, muss ein Zeitstempel, der mit diesem Intervall übereinstimmt, mit dem Start übereinstimmen oder danach liegen. |
end_time |
Optional. Exklusives Ende des Intervalls. Wenn angegeben, muss ein Zeitstempel, der mit diesem Intervall übereinstimmt, vor dem Ende liegen. |
LatLng
Ein Objekt, das ein Paar aus Breiten- und Längengrad darstellt. Es wird als Paar aus Werten vom Typ „Double“ (Breiten- und Längengrad) ausgedrückt. Sofern nicht anders angegeben, muss dieses Objekt dem WGS84-Standard entsprechen. Die Werte müssen innerhalb normalisierter Bereiche liegen.
Felder | |
---|---|
latitude |
Der Breitengrad in Grad. Er muss im Bereich [-90,0, +90,0] liegen. |
longitude |
Der Längengrad in Grad. Er muss im Bereich [-180,0, +180,0] liegen. |