ColorToPRGB

유형 coloruint 유형으로 변환하여 색상의 미리 곱해진 ARGB 표현(PRGB)을 얻습니다. PRGB 색상 형식은 그래픽 리소스, 텍스트 출력을 생성할 때와 CCanvas 스탠다드 라이브러리 클래스와 다음의 색상 형식과 함께 사용됩니다 COLOR_FORMAT_ARGB_RAW  (구성 요소 단말기에서 처리되지 않으며 사용자가 올바르게 준비해야 합니다.

uint  ColorToPRGB(
   color  clr,          // 컬러 포맷으로 컨버트된 컬러
   uchar  alpha=255     // 컬러 투명도를 제어하는 알파 채널
   );

매개 변수

clr

[in] 색상 유형 변수로 색상 값.

alpha

[in] 색상을 포맷으로 가져오기 위한 알파 채널 값 ARGB. 이 값은 0(겹쳐진 픽셀의 색상이 기본 픽셀의 표시를 전혀 변경하지 않음)부터 255(색상이 완전히 겹쳐져 기본 픽셀의 색상과 겹침)까지 설정됩니다. 색상 투명도(%)는 (1-알파/255)*100%로 계산됩니다. 즉, 알파 채널 값이 낮을수록 색상이 더 투명해집니다.

반환 값

ARGB 형식의 색상 표현. 여기서 4바이트의 단위 유형에는 Alfa, Red, Green, Blue(알파 채널, 빨간색, 녹색, 파란색) 값이 포함됩니다.

참조

PRGB는 어떠한 점이 ARGB과 틀릴까요?

알파 채널이 있는 RGBA 색상에는 두 가지 일반적인 표현이 있습니다:

  • 직선(일반) ARGB - RGB는 "있는 그대로" 저장되며 알파는 별개입니다;
  • 미리 곱셈(PRGB) - RGB에 이미 알파가 곱해졌습니다.

ModeCOLOR_FORMAT_ARGB_RAW는 색상 구성요소가 이미 올바르게 준비되었고 터미널이 이를 "정규화/재계산"하지 않는다고 가정합니다. 따라서 미리 곱해진 색상이 예상되는 시나리오에서는 전달되어야 하는 것이 PRGB입니다. 그렇지 않으면 렌더링 중에 시각적 아티팩트/불일치가 발생할 수 있습니다.

PRGB 컬러는 공식으로 계산됩니다:

R = R * A / 255

G = G * A / 255

B = B * A / 255

A = A 

특수한 케이스:

  • alpha = 255이면 결과는 ColorToARGB(clr,255)와 일치합니다(곱셈은 RGB를 변경하지 않음);
  • alpha = 0이면 결과는 0x00000000(완전 투명 픽셀, RGB = 0)이 됩니다.

예:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uchar alpha = 0x55// 0x55 = 85; 투명도 ~ (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)
   */
}

참조

Resources, ColorToARGB, ResourceCreate(), TextOut(), Color type, Types char, short, int and long