Package google.type

Dizin

Renk

RGBA renk alanındaki bir rengi temsil eder. Bu gösterim, çeşitli dillerdeki renk gösterimlerine ve bu gösterimlerden dönüşümün basitliği için tasarlanmıştır. Örneğin, bu temsilin alanları Java'da java.awt.Color sınıfının kurucusuna kolayca sağlanabilir; iOS'te UIColor'ın +colorWithRed:green:blue:alpha yöntemine de kolayca sağlanabilir ve biraz çalışmayla JavaScript'te CSS rgba() dizesi olarak kolayca biçimlendirilebilir.

Bu referans sayfasında, RGB değerini yorumlamak için kullanılması gereken mutlak renk alanı (ör. sRGB, Adobe RGB, DCI-P3 ve BT.2020) hakkında bilgi yoktur. Varsayılan olarak uygulamalar sRGB renk alanını kullanmalıdır.

Renk eşitliğine karar verilmesi gerektiğinde, aksi belirtilmediği sürece uygulamalar, kırmızı, yeşil, mavi ve alfa değerlerinin her biri en fazla 1e-5 farklıysa iki rengi eşit olarak değerlendirir.

Örnek (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();
 }
 // ...

Örnek (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;
}
// ...

Örnek (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('');
};

// ...
Alanlar
red

float

[0, 1] aralığındaki bir değer olarak renkteki kırmızı miktarı.

green

float

[0, 1] aralığındaki bir değer olarak renkteki yeşil miktarı.

blue

float

[0, 1] aralığındaki bir değer olarak renkteki mavi miktarı.

alpha

FloatValue

Bu rengin piksele uygulanması gereken oranı. Yani nihai piksel rengi şu denklemle tanımlanır:

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

Bu, 1,0 değerinin düz bir renge, 0,0 değerinin ise tamamen şeffaf bir renge karşılık geldiği anlamına gelir. Varsayılan değer ile ayarlanmamış değer arasında ayrım yapılabilmesi için bu işlemde basit bir kayan nokta skaler yerine sarmalayıcı mesaj kullanılır. Atlanırsa bu renk nesnesi düz renk olarak oluşturulur (alfa değerine açıkça 1, 0 değeri verilmiş gibi).