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].