الفهرس
اللون
يمثل لونًا في مساحة اللون 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 |
مقدار اللون الأحمر في اللون كقيمة في الفاصل [0، 1]. |
green |
مقدار اللون الأخضر في اللون كقيمة في الفاصل [0، 1]. |
blue |
مقدار اللون الأزرق في اللون كقيمة في الفاصل [0، 1]. |
alpha |
جزء هذا اللون الذي يجب تطبيقه على وحدة البكسل. بمعنى أنه يتم تحديد لون البكسل النهائي من خلال المعادلة:
هذا يعني أن القيمة 1.0 تتجاوب مع لون ثابت، في حين أن القيمة 0.0 تتجاوب مع لون شفاف تمامًا. يستخدم هذا رسالة برنامج تضمين بدلاً من مقياس عائم بسيط بحيث يمكن التمييز بين قيمة افتراضية والقيمة التي يتم إلغاء تعيينها. في حال حذفه، يتم عرض كائن اللون هذا كلون خالص (كما لو تم منح قيمة ألفا القيمة 1.0 بشكل صريح). |
الفاصل الزمني
تمثّل هذه السمة فاصلاً زمنيًا يتم ترميزه كبداية طابع زمني (شامل) ونهاية طابع زمني (حصري).
يجب أن تكون البداية أقل من النهاية أو مساوية لها. عندما تساوي البداية النهاية، يكون الفاصل فارغًا (لا يتطابق أي وقت). في حال عدم تحديد كل من البداية والنهاية، يتطابق الفاصل في أي وقت.
الحقول | |
---|---|
start_time |
اختياريّ. بداية شاملة للفاصل الزمني. في حال تحديد الطابع الزمني، يجب أن يكون الطابع الزمني المطابق لهذا الفاصل الزمني أو بعده. |
end_time |
اختياريّ. نهاية حصرية للفاصل الزمني في حال تحديد الطابع الزمني، يجب أن يكون الطابع الزمني المطابق لهذا الفاصل الزمني قبل النهاية. |
LatLng
تمثّل هذه السمة كائنًا يمثّل زوجًا من خطوط الطول/العرض. يتم التعبير عن ذلك كزوج من الازدواج لتمثيل درجات خطوط الطول والعرض. يجب أن يتوافق هذا الكائن مع معيار WGS84 ما لم يتم تحديد خلاف ذلك. يجب أن تكون القيم ضمن نطاقات تمت تسويتها.
الحقول | |
---|---|
latitude |
تمثّل هذه السمة خط العرض بالدرجات. يجب أن يكون ضِمن نطاق [ -90.0 أو +90.0]. |
longitude |
خط الطول بالدرجات. يجب أن يكون ضمن النطاق [-180.0، +180.0]. |