Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Заведи торговый сигнал. Зарабатывай на платной подписке!
Комбинатор
15638
Комбинатор 2016.04.25 08:08 

Рисую тут на канве и обнаружил странное поведение, которое мне не нравится и которое я не могу пока победить.

Засада в том, что на разных графиках и разных терминалах получается разный принцип наложения картинки.

На одном графике нарисованная (с прозрачностью, ARGB Raw) картинка рисуется как надо, на втором под графиком (нет, свойство как фон не выставлено), на третьем вообще ксорится с графиком. Кто в курсе что это вообще такое и как на это влиять? Я вообще не трогаю (да и не в курсе есть ли такие) какие-нибудь свойства наложения объектов

MetaQuotes Software Corp.
Модератор
177147
MetaQuotes Software Corp. 2016.04.25 11:38  
Приведите примеры, скриншоты и код, пожалуйста.
Комбинатор
15638
Комбинатор 2016.04.25 12:51  

Пример дома попробую минимизировать, пока скриншот. Я так понимаю, канвас вообще не должен XORиться, до этого я такого не видел, ан вот:

Картинка нарисована форматом ARGB Raw, с прозрачностью. Пользуюсь стандартным CCanvas

Другие картинки и код будет когда доберусь домой


Ilyas
1182
Ilyas 2016.04.25 12:59  

Дело в том, что Вам следует использовать формат COLOR_FORMAT_ARGB_NORMALIZE, а не COLOR_FORMAT_ARGB_RAW

Статья на wiki в тему, к сожалению только на английском.

Ilyas
1182
Ilyas 2016.04.25 13:34  
Если используется COLOR_FORMAT_ARGB_RAW, то это означает, что цвет точки уже прошёл "premultiplied" обработку, а именно (пример кода):
//--- конвертируем картинку в premultiplied ARGB
for(UINT i=0;i<img_size;i++)
  {
   switch(a=BYTE(rgb[i]>>24))
     {
      case 0xFF: break;
      case 0x00: rgb[i]=0; break;
      default:
        r   =BYTE((rgb[i]>>16)&255);
        g   =BYTE((rgb[i]>> 8)&255);
        b   =BYTE((rgb[i]    )&255);
        rgb[i]=(a<<24)|(BYTE(r*a/255)<<16)|(BYTE(g*a/255)<<8)|BYTE(b*a/255);
        break;
     }
  }



Комбинатор
15638
Комбинатор 2016.04.25 14:02  

Спасибо, попробую. Но тогда в справке не совсем понятно написано

Я бы и в жизни не подумал, что вот это

Компоненты цвета не обрабатываются терминалом (должны быть корректно заданы пользователем)

каким-то боком относится к premultiplied

_________

Да, так все ок


/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий