Indice
Colore
Rappresenta un colore nello spazio colore RGBA. Questa rappresentazione è stata concepita per semplificare la conversione da e verso rappresentazioni cromatiche in vari linguaggi rispetto alla compattezza. Ad esempio, i campi di questa rappresentazione possono essere banalimente forniti al costruttore di java.awt.Color
in Java; possono anche essere forniti in modo banale al metodo +colorWithRed:green:blue:alpha
di UIColor in iOS e, con un piccolo lavoro, può essere facilmente formattato in una stringa CSS rgba()
in JavaScript.
Questa pagina di riferimento non contiene informazioni sullo spazio colore assoluto che dovrebbe essere utilizzato per interpretare il valore RGB, ad esempio sRGB, Adobe RGB, DCI-P3 e BT.2020. Per impostazione predefinita, le applicazioni devono utilizzare lo spazio colore sRGB.
Quando è necessario determinare l'uguaglianza dei colori, le implementazioni, a meno che non sia documentato diversamente, considerano uguali due colori se tutti i valori di rosso, verde, blu e alfa differiscono al massimo 1e-5
.
Esempio (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();
}
// ...
Esempio (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;
}
// ...
Esempio (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('');
};
// ...
Campi | |
---|---|
red |
La quantità di rosso nel colore come valore nell'intervallo [0, 1]. |
green |
La quantità di verde nel colore come valore nell'intervallo [0, 1]. |
blue |
La quantità di blu nel colore come valore nell'intervallo [0, 1]. |
alpha |
La frazione di questo colore da applicare al pixel. In altre parole, il colore dei pixel finale viene definito dall'equazione:
Ciò significa che un valore pari a 1,0 corrisponde a un colore a tinta unita, mentre un valore pari a 0,0 corrisponde a un colore completamente trasparente. Questo utilizza un messaggio wrapper anziché un semplice valore scalare in virgola mobile, in modo che sia possibile distinguere tra un valore predefinito e il valore che viene annullato. Se omesso, questo oggetto colore viene visualizzato in un colore a tinta unita (come se al valore alfa fosse stato assegnato esplicitamente il valore 1,0). |
Data
Rappresenta una data di calendario intera o parziale, ad esempio un compleanno. L'ora del giorno e il fuso orario sono specificati altrove o non sono significativi. La data è relativa al calendario gregoriano. Può rappresentare uno dei seguenti valori:
- Una data completa, con valori di anno, mese e giorno diversi da zero.
- Un mese e un giorno, con un anno zero (ad esempio, un anniversario).
- Un anno per sé, con un mese e un giorno zero.
- Un anno e un mese, con un giorno zero (ad esempio, la data di scadenza di una carta di credito).
Tipi correlati:
google.type.TimeOfDay
google.type.DateTime
google.protobuf.Timestamp
Campi | |
---|---|
year |
Anno della data. Il valore deve essere compreso tra 1 e 9999 oppure 0 per specificare una data senza anno. |
month |
Mese dell'anno. Deve essere compreso tra 1 e 12 oppure 0 per specificare un anno senza giorno e mese. |
day |
Giorno del mese. Deve essere compreso tra 1 e 31 ed essere valido per l'anno e il mese oppure 0 per specificare un anno da solo o un anno e un mese in cui il giorno non è significativo. |
LatLng
Un oggetto che rappresenta una coppia di latitudine/longitudine. Questo valore viene espresso come una coppia di doppi per rappresentare i gradi di latitudine e i gradi di longitudine. Se non diversamente specificato, questo oggetto deve essere conforme allo standard WGS84. I valori devono essere compresi in intervalli normalizzati.
Campi | |
---|---|
latitude |
Latitudine in gradi. Deve essere compreso nell'intervallo [-90,0, +90,0]. |
longitude |
Longitudine in gradi. Deve essere compreso nell'intervallo [-180,0, +180,0]. |