Package google.type

Chỉ mục

Màu

Đại diện cho một màu trong hệ màu RGBA. Bản trình bày này được thiết kế để đơn giản hoá việc chuyển đổi sang và từ các bản trình bày màu sắc bằng nhiều ngôn ngữ hơn là tính nhỏ gọn. Ví dụ: các trường của cách biểu diễn này có thể được cung cấp đơn giản cho hàm khởi tạo của java.awt.Color trong Java; cũng có thể cung cấp thông tin đơn giản cho phương thức +colorWithRed:green:blue:alpha của UIColor trong iOS; và chỉ cần thực hiện một chút thao tác, bạn có thể dễ dàng định dạng chuỗi thành chuỗi CSS rgba() trong JavaScript.

Trang tham khảo này không có thông tin về hệ màu tuyệt đối cần dùng để diễn giải giá trị RGB, ví dụ: sRGB, Adobe RGB, DCI-P3 và BT.2020. Theo mặc định, các ứng dụng phải giả định hệ màu sRGB.

Khi cần quyết định sự cân bằng màu, việc triển khai (trừ phi có tài liệu khác) coi hai màu là như nhau nếu tất cả giá trị đỏ, xanh lục, xanh dương và alpha của các màu đó chênh lệch tối đa là 1e-5.

Ví dụ (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();
 }
 // ...

Ví dụ (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;
}
// ...

Ví dụ (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('');
};

// ...
Các trường
red

float

Lượng màu đỏ trong màu dưới dạng một giá trị trong khoảng [0, 1].

green

float

Lượng màu xanh lục trong màu dưới dạng một giá trị trong khoảng [0, 1].

blue

float

Lượng màu xanh dương trong màu dưới dạng một giá trị trong khoảng [0, 1].

alpha

FloatValue

Phần màu này sẽ được áp dụng cho pixel. Tức là màu pixel cuối cùng được xác định theo phương trình:

pixel color = alpha * (this color) + (1.0 - alpha) * (background color)

Điều này có nghĩa rằng giá trị 1.0 tương ứng với một màu đồng nhất, trong khi giá trị 0.0 tương ứng với một màu đồng nhất. Thao tác này sử dụng thông báo trình bao bọc thay vì đại lượng vô hướng số thực đơn giản để có thể phân biệt giữa giá trị mặc định và giá trị chưa được đặt. Nếu bị bỏ qua, đối tượng màu này sẽ hiển thị dưới dạng một màu đồng nhất (như thể giá trị alpha đã được chỉ định rõ ràng là 1.0).

Ngày

Đại diện cho toàn bộ hoặc một phần ngày theo lịch, chẳng hạn như ngày sinh. Thời gian trong ngày và múi giờ được chỉ định ở nơi khác hoặc không đáng kể. Ngày này có liên quan đến Dương lịch. Điều này có thể đại diện cho một trong những điều sau:

  • Ngày đầy đủ, với các giá trị năm, tháng và ngày khác 0.
  • Tháng và ngày, với năm 0 (ví dụ: ngày kỷ niệm).
  • Chỉ có một năm, có một tháng không có ngày nào.
  • Năm và tháng, không có ngày (ví dụ: ngày hết hạn thẻ tín dụng).

Các loại có liên quan:

Các trường
year

int32

Năm của ngày tháng. Phải từ 1 đến 9999 hoặc 0 để chỉ định ngày không có năm.

month

int32

Tháng trong năm. Phải từ 1 đến 12 hoặc từ 0 để chỉ định một năm không có tháng và ngày.

day

int32

Ngày trong tháng. Giá trị phải từ 1 đến 31 và có giá trị trong năm và tháng, hoặc 0 để chỉ định một năm hoặc một năm và tháng không có ngày quan trọng.

LatLng

Một đối tượng đại diện cho cặp vĩ độ/kinh độ. Đây là một cặp số kép để biểu thị độ vĩ độ và độ kinh độ. Trừ phi có quy định khác, đối tượng này phải tuân thủ tiêu chuẩn WGS84. Giá trị phải nằm trong phạm vi chuẩn hoá.

Các trường
latitude

double

Vĩ độ tính theo độ. Giá trị này phải nằm trong khoảng [-90,0, +90,0].

longitude

double

Kinh độ theo độ. Giá trị này phải nằm trong khoảng [-180,0, +180,0].