אינדקס
צבע
מייצג צבע במרחב הצבעים RGBA. הייצוג הזה נועד לפשט את ההמרה לייצוגים של צבעים בשפות שונות, או מהם, תוך התמקדות בפשטות ולא בדחיסה. לדוגמה, אפשר לספק את השדות של הייצוג הזה בקלות לקונסטרוקטור של java.awt.Color ב-Java. אפשר גם לספק אותם בקלות לשיטה +colorWithRed:green:blue:alpha של UIColor ב-iOS. בנוסף, אפשר לעצב אותם בקלות למחרוזת rgba() של CSS ב-JavaScript, עם קצת עבודה.
הערה: פרוטוקול זה לא כולל מידע על מרחב הצבעים המוחלט שצריך לשמש לפרשנות של ערך ה-RGB (למשל, sRGB, Adobe RGB, DCI-P3, BT.2020 וכו'). כברירת מחדל, האפליקציות צריכות להניח שמרחב הצבעים הוא sRGB.
דוגמה (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();
}
// ...
דוגמה (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;
}
// ...
דוגמה (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('');
};
// ...
| שדות | |
|---|---|
red |
כמות האדום בצבע כערך במרווח [0, 1]. |
green |
כמות הירוק בצבע כערך במרווח [0, 1]. |
blue |
כמות הכחול בצבע כערך במרווח [0, 1]. |
alpha |
החלק היחסי של הצבע הזה שצריך להחיל על הפיקסל. כלומר, הצבע הסופי של הפיקסל מוגדר על ידי המשוואה: צבע הפיקסל = אלפא * (הצבע הזה) + (1.0 – אלפא) * (צבע הרקע) כלומר, ערך של 1.0 מתאים לצבע אחיד, ואילו ערך של 0.0 מתאים לצבע שקוף לחלוטין. ההגדרה הזו משתמשת בהודעת wrapper במקום בסקלר פשוט של מספרים ממשיים, כדי לאפשר הבחנה בין ערך ברירת מחדל לבין ערך שלא הוגדר. אם לא מציינים את אובייקט הצבע הזה, הוא יוצג כצבע אחיד (כאילו ערך האלפא צוין במפורש כ-1.0). |
LatLng
אובייקט שמייצג זוג של קו רוחב וקו אורך. הערך הזה מופיע כזוג מספרים עשרוניים שמייצגים את מעלות קו הרוחב ומעלות קו האורך. אלא אם צוין אחרת, הערך הזה צריך להיות בהתאם לתקן WGS84. הערכים צריכים להיות בטווחים מנורמלים.
| שדות | |
|---|---|
latitude |
קו הרוחב במעלות. הערך חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |