ColorToPRGB

Rengin önceden çarpılmış (premultiplied) ARGB temsilini (PRGB) elde etmek için color türünü uint türüne dönüştürür. PRGB renk formatı, grafiksel kaynak oluştururken, metin çıktısı alırken ve CCanvas standart kütüphane sınıfında COLOR_FORMAT_ARGB_RAW renk formatıyla kullanılır (bileşenler terminal tarafından işlenmez ve kullanıcı tarafından doğru şekilde hazırlanmalıdır).

uint  ColorToPRGB(
   color  clr,          // color türünde dönüştürülen renk
   uchar  alpha=255     // renk şeffaflığını kontrol eden alfa kanalı
   );

Parametreler

clr

[in] color türünde bir değişkendeki renk değeri.

alpha

[in] ARGB formatında renk elde etmek için alfa kanalı değeri. 0 (üst üste bindirilen pikselin rengi alttaki pikselin görüntüsünü hiç değiştirmez) ile 255 (renk tamamen üst üste bindirilir ve alttaki pikselin rengini örter) arasında ayarlanır. Yüzde cinsinden renk saydamlığı (1-alpha/255)*100% olarak hesaplanır, yani alfa kanalı değeri ne kadar düşük olursa renk o kadar saydam olur.

Geri dönüş değeri

uint türündeki dört baytın Alpha, Red, Green, Blue (alfa kanalı, kırmızı, yeşil, mavi) değerlerini içerdiği ARGB formatında renk temsili.

Not

PRGB'nin ARGB'den farkı nedir?

RGBA renginin alfa kanallı iki genel temsili vardır:

  • straight (normal) ARGB - RGB "olduğu gibi" saklanır, alfa ayrıdır;
  • premultiplied (PRGB) - RGB zaten alfa ile çarpılmıştır.

COLOR_FORMAT_ARGB_RAW modu, renk bileşenlerinin halihazırda doğru şekilde hazırlandığını varsayar ve terminal bunları "normalleştirmez/yeniden hesaplamaz". Bu nedenle, önceden çarpılmış (premultiplied) rengin beklendiği senaryolarda, iletilmesi gereken PRGB'dir, aksi takdirde render sırasında görsel artefaktlar/uyumsuzluklar oluşabilir.

PRGB rengi aşağıdaki formülle hesaplanır:

R = R * A / 255

G = G * A / 255

B = B * A / 255

A = A 

Özel Durumlar:

  • alpha = 255 olduğunda sonuç ColorToARGB(clr, 255) ile çakışır (çarpma işlemi RGB'yi değiştirmez);
  • alpha = 0 olduğunda sonuç 0x00000000 (tamamen saydam piksel, RGB = 0) olur.

Örnek:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uchar alpha = 0x55// 0x55 = 85; şeffaflık ~ (255-85)/255 * 100% = 66.7%
   color c = clrWhite;
 
   PrintFormat("0x%%.8X - %s"cColorToString(c,true));
   PrintFormat("0x%.8X - ARGB (straight)"ColorToARGB(calpha));
   PrintFormat("0x%.8X - PRGB (premultiplied)"ColorToPRGB(calpha));
   /*
   0x00FFFFFF - clrWhite
   0x55FFFFFF - ARGB (straight)
   0x55555555 - PRGB (premultiplied)
   */
}

Ayrıca bakınız

Resources, ColorToARGB, ResourceCreate(), TextOut(), Color türü, Char, short, int ve long türleri