Package google.type

אינדקס

צבע

מייצג צבע במרחב הצבעים 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

float

כמות האדום בצבע כערך במרווח [0, 1].

green

float

כמות הירוק בצבע כערך במרווח [0, 1].

blue

float

כמות הכחול בצבע כערך במרווח [0, 1].

alpha

FloatValue

החלק היחסי של הצבע הזה שצריך להחיל על הפיקסל. כלומר, הצבע הסופי של הפיקסל מוגדר על ידי המשוואה:

צבע הפיקסל = אלפא * (הצבע הזה) + (‎1.0 – אלפא) * (צבע הרקע)

כלומר, ערך של 1.0 מתאים לצבע אחיד, ואילו ערך של 0.0 מתאים לצבע שקוף לחלוטין. ההגדרה הזו משתמשת בהודעת wrapper במקום בסקלר פשוט של מספרים ממשיים, כדי לאפשר הבחנה בין ערך ברירת מחדל לבין ערך שלא הוגדר. אם לא מציינים את אובייקט הצבע הזה, הוא יוצג כצבע אחיד (כאילו ערך האלפא צוין במפורש כ-1.0).

LatLng

אובייקט שמייצג זוג של קו רוחב וקו אורך. הערך הזה מופיע כזוג מספרים עשרוניים שמייצגים את מעלות קו הרוחב ומעלות קו האורך. אלא אם צוין אחרת, הערך הזה צריך להיות בהתאם לתקן WGS84. הערכים צריכים להיות בטווחים מנורמלים.

שדות
latitude

double

קו הרוחב במעלות. הערך חייב להיות בטווח [‎-90.0, ‎+90.0].

longitude

double

קו האורך במעלות. הוא חייב להיות בטווח [‎-180.0, ‎+180.0].