Gösterge Çizgilerine Hacim Etkisi Ekleme - sayfa 9

 

Tuval üzerinde yatay degrade.

Dosyalar:
gradient.mq5  5 kb
 

Kodu biraz geliştirdim ve ayrıca oluşturma hızından sorumlu bir değişken ekledim:

 input uchar speed= 5 ;             // visible effect

Oluşturma hızındaki değişiklik, tuvali her çizgi çiziminden sonra değil, aralıklarla güncelleyerek yapılır.

Boşluğun boyutu, "Bölmenin Kalanı" aritmetik işlemi kullanılarak hesaplanır:

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

Burada farklı renkleri üst üste bindiriyorum: arka plan renginde, tamamen opak (alfa kanalı 255), bir rengi saydamlıkla kaplıyorum (alfa kanalı 128). Soru ortaya çıktı - COLOR_FORMAT_ARGB_RAW ve COLOR_FORMAT_ARGB_NORMALIZE modları için bir pikselin son rengini hesaplamak için hangi formüller kullanılıyor.

Ortaya çıkan rengin hesaplanması makalesine odaklanırsanız, hesaplamalar eşleşmez.

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

Nerede yanlış: renk sabitleri yanlış veri depoluyor veya PrintFormat işlevi düzgün çalışmıyor mu?

PrintFormat aracılığıyla renkleri tamsayı biçiminde veren bir komut dosyası:

 //+------------------------------------------------------------------+
//|                                                  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));
  }
//+------------------------------------------------------------------+

Çıktı sonucu:

 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

clrRed neden 0x000000FF olarak temsil ediliyor ve 0x00FF0000 olarak değil? Sonuçta, kırmızı C'255,0,0'.

clrBlue neden 0x00FF0000 olarak temsil ediliyor ve 0x000000FF olarak değil? Sonuçta mavi C'0,0,255'.

Dosyalar:
 
Her şey doğru. ARGB, Color'a kıyasla farklı bir veri depolama formatına sahiptir.
 
TheXpert :
Her şey doğru. ARGB, Color'a kıyasla farklı bir veri depolama biçimine sahiptir.

Kayıt formatı aynı olmalıdır: önce alfa kanalı (varsa), ardından RGB. help'e göre , Color türü , mavi rengi değişmez değerlerle yazar:

C'0x00,0x00,0xFF' // mavi

onlar. tamsayı gösteriminde mavi renk (alfa kanalı olmadan) şu şekilde yazılmalıdır: 0x0000FF. Ancak test komut dosyası mavi rengi geriye doğru verir:

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

Renk sabitlerinde rengin tersten yazıldığı ortaya çıktı.

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

Renk sabitlerinde rengin tersten yazıldığı ortaya çıktı.

Evet. Kelimenin tam anlamıyla böyle bir sıra, Color'ın aynı sıraya sahip olduğu anlamına gelmez.
 

COLOR_FORMAT_ARGB_RAW ile, "0" (tam saydamlık) parametreli TransparentLevelSet yöntemi, saydamlığı tam saydamlığa yakın yapar, ancak açıkçası tam saydamlık yapmaz.

Dosyalar:
 
barabashkakvn :

COLOR_FORMAT_ARGB_RAW ile, "0" (tam saydamlık) parametreli TransparentLevelSet yöntemi, saydamlığı tam saydamlığa yakın yapar, ancak açıkçası tam saydamlık yapmaz.

Açıklama: "0" şeffaflık düzeyinde artık şeffaflık yalnızca x32'de gözlemlenir. x64'te artık saydamlık yoktur:

x32


x64


COLOR_FORMAT_ARGB_RAW modundaki bu tuval davranışı bir hata mı yoksa x32 ve x64 sistemlerinde çizim özelliği mi?

 
barabashkakvn :

Açıklama: "0" şeffaflık düzeyinde artık şeffaflık yalnızca x32'de gözlemlenir. x64'te artık saydamlık yoktur:

COLOR_FORMAT_ARGB_RAW modundaki bu tuval davranışı bir hata mı yoksa x32 ve x64 sistemlerinde çizim özelliği mi?

Servis masasında yapmanız gereken ...)))