Package google.type

الفهرس

اللون

يمثل لونًا في مساحة ألوان RGBA. تم تصميم هذا التمثيل لتبسيط عملية التحويل من وإلى تمثيلات الألوان بلغات مختلفة على مدى الاكتفاء. على سبيل المثال، يمكن تقديم حقول هذا التمثيل بشكل بسيط إلى الدالة الإنشائية java.awt.Color في Java؛ يمكن أيضًا تقديمه بطريقة تافهة لطريقة +colorWithRed:green:blue:alpha في UIColor على نظام iOS؛ ومن خلال القليل من العمل، يمكن تنسيقه بسهولة إلى سلسلة CSS rgba() في JavaScript.

لا تحتوي هذه الصفحة المرجعية على معلومات عن مساحة اللون المطلقة التي يجب استخدامها لتفسير قيمة النموذج اللوني أحمر أخضر أزرق، على سبيل المثال، 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 مع لون شفاف تمامًا. يستخدم ذلك رسالة تضمين بدلاً من عدد قياسي عائم بسيط بحيث يمكن التمييز بين القيمة التلقائية والقيمة التي يتم إلغاء تعيينها. وعند إسقاطه، يتم عرض كائن اللون هذا كلون ثابت (كما لو تم إعطاء قيمة ألفا بوضوح قيمة 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].