Скачать MetaTrader 5

Канвас, наложение картинки и всего остального

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

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

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

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

MetaQuotes Software Corp.
Модератор
185450
MetaQuotes Software Corp.  
Приведите примеры, скриншоты и код, пожалуйста.
Комбинатор
16297
Комбинатор  

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

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

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


Ilyas
1202
Ilyas  

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

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

Ilyas
1202
Ilyas  
Если используется 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;
     }
  }



Комбинатор
16297
Комбинатор  

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

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

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

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

_________

Да, так все ок


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