Indice
Color
(messaggio)
Colore
Rappresenta un colore nello spazio colore RGBA. Questa rappresentazione è progettata per semplificare la conversione da e verso le rappresentazioni dei colori in varie lingue rispetto alla compattezza. Ad esempio, i campi di questa rappresentazione possono essere forniti facilmente al costruttore di java.awt.Color
in Java; possono anche essere forniti facilmente al metodo +colorWithRed:green:blue:alpha
di UIColor in iOS; e, con un po' di lavoro, possono essere facilmente formattati in una stringa rgba()
CSS in JavaScript.
Questa pagina di riferimento non contiene informazioni sullo spazio colore assoluto da utilizzare per interpretare il valore RGB, ad esempio sRGB, Adobe RGB, DCI-P3 e BT.2020. Per impostazione predefinita, le applicazioni dovrebbero assumere lo spazio colore sRGB.
Quando è necessario decidere l'uguaglianza dei colori, le implementazioni, a meno che non sia documentato diversamente, trattano due colori come uguali se tutti i valori di rosso, verde, blu e alfa differiscono ciascuno di 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 compreso nell'intervallo [0, 1]. |
green |
La quantità di verde nel colore come valore compreso nell'intervallo [0, 1]. |
blue |
La quantità di blu nel colore come valore compreso nell'intervallo [0, 1]. |
alpha |
La frazione di questo colore da applicare al pixel. In altre parole, il colore del pixel finale è definito dall'equazione:
Ciò significa che un valore di 1,0 corrisponde a un colore a tinta unita, mentre un valore di 0,0 corrisponde a un colore completamente trasparente. Viene utilizzato un messaggio wrapper anziché un semplice scalare float in modo da distinguere un valore predefinito dal valore non impostato. Se omesso, questo oggetto di colore viene visualizzato come un colore a tinta unita (come se al valore alfa fosse stato assegnato esplicitamente un valore di 1,0). |