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

 

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

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

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

 
Приведите примеры, скриншоты и код, пожалуйста.
 

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

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

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


 

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

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

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



 

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

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

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

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

_________

Да, так все ок