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 بشكل صريح).

الفاصل الزمني

تمثّل هذه السمة فاصلاً زمنيًا يتم ترميزه كبداية طابع زمني (شامل) ونهاية طابع زمني (حصري).

يجب أن تكون البداية أقل من النهاية أو مساوية لها. عندما تساوي البداية النهاية، يكون الفاصل فارغًا (لا يتطابق أي وقت). في حال عدم تحديد كل من البداية والنهاية، يتطابق الفاصل في أي وقت.

الحقول
start_time

Timestamp

اختياريّ. بداية شاملة للفاصل الزمني.

في حال تحديد الطابع الزمني، يجب أن يكون الطابع الزمني المطابق لهذا الفاصل الزمني أو بعده.

end_time

Timestamp

اختياريّ. نهاية حصرية للفاصل الزمني

في حال تحديد الطابع الزمني، يجب أن يكون الطابع الزمني المطابق لهذا الفاصل الزمني قبل النهاية.

LatLng

تمثّل هذه السمة كائنًا يمثّل زوجًا من خطوط الطول/العرض. يتم التعبير عن ذلك كزوج من الازدواج لتمثيل درجات خطوط الطول والعرض. يجب أن يتوافق هذا الكائن مع معيار WGS84 ما لم يتم تحديد خلاف ذلك. يجب أن تكون القيم ضمن نطاقات تمت تسويتها.

الحقول
latitude

double

تمثّل هذه السمة خط العرض بالدرجات. يجب أن يكون ضِمن نطاق [ -90.0 أو +90.0].

longitude

double

خط الطول بالدرجات. يجب أن يكون ضمن النطاق [-180.0، +180.0].