표시선에 볼륨 효과 추가 - 페이지 9

 

캔버스에 가로 그라데이션입니다.

파일:
gradient.mq5  5 kb
 

코드를 약간 개선하고 렌더링 속도를 담당하는 변수도 도입했습니다.

 input uchar speed= 5 ;             // visible effect

렌더링 속도의 변화는 각 선을 그린 후가 아니라 간격으로 캔버스를 업데이트하여 이루어집니다.

간격의 크기는 "나머지 나누기" 산술 연산 을 사용하여 계산됩니다.

       if (i%speed== 0 )
         canvas_.Update()
파일:
gradient.mq5  5 kb
 

여기에서 다른 색상을 오버레이합니다. 배경색에 완전히 불투명한(알파 채널 255) 투명도가 있는 색상을 오버레이합니다(알파 채널은 128). COLOR_FORMAT_ARGB_RAW 및 COLOR_FORMAT_ARGB_NORMALIZE 모드에서 픽셀의 최종 색상을 계산하는 데 사용되는 공식은 무엇입니까?

결과 색상의 계산 기사에 초점을 맞추면 계산이 일치하지 않습니다.

Альфа-канал — Википедия
Альфа-канал — Википедия
  • ru.wikipedia.org
В компьютерной графике альфа-композиция обозначает процесс комбинирования изображения с фоном с целью создания эффекта частичной прозрачности. Этот метод часто применяется для многопроходной обработки изображения по частям с последующей комбинацией этих частей в единое двумерное результирующее изображение. Таким образом, альфа канал...
 

잘못된 부분: 색상 상수가 잘못된 데이터를 저장하거나 PrintFormat 기능이 제대로 작동하지 않습니까?

다음은 PrintFormat을 통해 정수 형식으로 색상을 출력하는 스크립트입니다.

 //+------------------------------------------------------------------+
//|                                                  Script_test.mq5 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//--- зададим прозрачность
   uchar alfa= 0x80 ; // значение 0x80 означает 128/255=50 % прозрачности   
   //--- выведем преобразование в ARGB для цвета clrBlue
   PrintFormat ( "0x%.8X - clrBlue" , clrBlue );
   PrintFormat ( "0x%.8X - clrBlue ARGB with alfa=0x80 (transparency 50%%)" , ColorToARGB ( clrBlue ,alfa));
   //--- выведем преобразование в ARGB для цвета clrGreen
   PrintFormat ( "0x%.8X - clrGreen" , clrGreen );
   PrintFormat ( "0x%.8X - clrGreen ARGB with alfa=0x80 (transparency 50%%)" , ColorToARGB ( clrGreen ,alfa));
   //--- выведем преобразование в ARGB для цвета clrRed
   PrintFormat ( "0x%.8X - clrRed" , clrRed );
   PrintFormat ( "0x%.8X - clrRed ARGB with alfa=0x0x80 (transparency 50%%)" , ColorToARGB ( clrRed ,alfa));
  }
//+------------------------------------------------------------------+

출력 결과:

 2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x80FF0000 - clrRed ARGB with alfa= 0x0x80 (transparency 50 %)
2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x000000FF - clrRed
2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x80008000 - clrGreen ARGB with alfa= 0x80 (transparency 50 %)
2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x00008000 - clrGreen
2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x800000FF - clrBlue ARGB with alfa= 0x80 (transparency 50 %)
2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x00FF0000 - clrBlue

clrRed0x00FF0000 이 아닌 0x000000FF 로 표시되는 이유는 무엇입니까? 결국 빨간색은 C'255,0,0'입니다.

clrBlue0x000000FF 가 아닌 0x00FF0000 으로 표시되는 이유는 무엇입니까? 결국 파란색은 C'0,0,255'입니다.

파일:
 
모든 것이 맞습니다. ARGB는 Color에 비해 데이터 저장 형식이 다릅니다.
 
TheXpert :
모든 것이 맞습니다. ARGB는 Color에 비해 데이터 저장 형식이 다릅니다.

기록 형식은 동일해야 합니다. 먼저 알파 채널(있는 경우) 다음 RGB입니다. 도움말에 따르면 Color 유형 은 리터럴을 통해 파란색을 씁니다.

C'0x00,0x00,0xFF' // 파란색

저것들. 정수 표현에서 파란색(알파 채널 없음)은 0x0000FF와 같이 작성해야 합니다. 그러나 테스트 스크립트는 파란색을 거꾸로 출력합니다.

 2015.01 . 24 21 : 50 : 31.164 Script_test (GBPUSD,D1) 0x00FF0000 - clrBlue

색상 상수에서 색상이 거꾸로 쓰여진 것으로 나타났습니다.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип color
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип color
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип color - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
barabashkakvn :

색상 상수에서 색상이 거꾸로 쓰여진 것으로 나타났습니다.

네. 문자 그대로의 이러한 순서는 Color의 순서가 동일하다는 것을 의미하지 않습니다.
 

COLOR_FORMAT_ARGB_RAW를 사용하는 경우 매개변수 "0"(완전 투명도)이 있는 TransparentLevelSet 메서드는 투명도를 전체 투명도에 가깝게 만들지만 분명히 완전한 투명도는 아닙니다.

파일:
 
barabashkakvn :

COLOR_FORMAT_ARGB_RAW를 사용하는 경우 매개변수 "0"(완전 투명도)이 있는 TransparentLevelSet 메서드는 투명도를 전체 투명도에 가깝게 만들지만 분명히 완전한 투명도는 아닙니다.

설명: 투명도 수준 "0"에서 잔여 투명도는 x32에서만 관찰됩니다. x64에는 잔여 투명도가 없습니다.

x32


x64


COLOR_FORMAT_ARGB_RAW 모드에서 이 캔버스 동작 은 버그입니까 아니면 x32 및 x64 시스템에서 그리는 기능입니까?

 
barabashkakvn :

설명: 투명도 수준 "0"에서 잔여 투명도는 x32에서만 관찰됩니다. x64에는 잔여 투명도가 없습니다.

COLOR_FORMAT_ARGB_RAW 모드에서 이 캔버스 동작 은 버그입니까 아니면 x32 및 x64 시스템에서 그리는 기능입니까?

서비스 데스크에서 ...)))