Package google.type

אינדקס

צבע

מייצג צבע במרחב הצבעים RGBA. הייצוג הזה נועד לאפשר פשטות המרה אל ומתוך ייצוגי צבע בשפות שונות, על-פני קומפקטיות. לדוגמה, אפשר לספק את השדות של הייצוג הזה באופן טריוויאלי ל-constructor של java.awt.Color ב-Java; אפשר גם לספק אותו באופן טריוויאלי ל-method +colorWithRed:green:blue:alpha של UIColor ב-iOS. ובמאמץ קטן, ניתן לעצב אותו בקלות למחרוזת rgba() CSS ב-JavaScript.

בדף העזר הזה אין מידע על מרחב הצבעים המוחלט שצריך להשתמש בו כדי לפרש את ערך ה-RGB – לדוגמה, sRGB, Adobe RGB, DCI-P3 ו-BT.2020. כברירת מחדל, האפליקציות צריכות להשתמש במרחב הצבעים sRGB.

אם צריך לקבוע שיוויון צבעים, אם לא תועד אחרת, המערכת תתייחס לשני צבעים באופן שווה אם כל הערכים בצבע אדום, ירוק, כחול ואלפא שונים זה מזה ב-1e-5 לכל היותר.

דוגמה (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

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

pixel color = alpha * (this color) + (1.0 - alpha) * (background color)

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

תאריך

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

  • תאריך מלא, עם ערכים שונים של שנה, חודש ויום.
  • חודש ויום, עם שנה אפס (למשל יום נישואין).
  • שנה בפני עצמה, עם חודש אפס ויום אפס.
  • שנה וחודש, עם יום אפס (לדוגמה, תאריך תפוגה של כרטיס אשראי).

סוגים קשורים:

שדות
year

int32

השנה שבה חל התאריך. חייב להיות בין 1 ל-9999, או 0 כדי לציין תאריך ללא שנה.

month

int32

החודש בשנה. הערך חייב להיות 1 עד 12, או 0 כדי לציין שנה בלי חודש ויום.

day

int32

היום בחודש. הערך צריך להיות בין 1 ל-31 ותקף לשנה ולחודש, או 0 כדי לציין שנה בלבד או שנה וחודש שבהם אין חשיבות לציון יום מסוים.

LatLng

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

שדות
latitude

double

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

longitude

double

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