Package google.type

אינדקס

צבע

מייצג צבע במרחב הצבעים RGBA. הייצוג הזה מפשט את ההמרה לייצוגי צבע בשפות שונות ועד לקומפקטיות. לדוגמה, ניתן לספק באופן טריוויאלי את השדות של הייצוג הזה לבנאי של java.awt.Color ב-Java; ניתן לספק אותו באופן טריוויאלי גם לשיטת +colorWithRed:green:blue:alpha של UIColor ב-iOS. ועם מעט עבודה, ניתן לעצב אותו בקלות למחרוזת CSS rgba() ב-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].