Текст на полупрозрачном фоне - страница 2

 
pivalexander #:

Пока не догадался, если вы про это 

То я тоже самое делаю, только так 

Но это не то что мне надо

Попробуйте фон не 0x11000000, как у вас, а 0x11010101
Не уверен, что получится, так как до сих пор не за компом.
Это старый семантический баг MQ. Причем и на МТ5 тоже.
 
Nikolai Semko #:
Попробуйте фон не 0x11000000, как у вас, а 0x11010101
Не уверен, что получится, так как до сих пор не за компом.
Это старый семантический баг MQ.

Мне не нужен прозрачный фон или какой то определенный

Мне надо на полупрозрачном фоне любого цвета, выводить текст, так как будто он выводится на белом или совсем прозрачном фоне

а в TextOut()  какие то проблемы с этим, при сглаживании шрифтов на полупрозрачном фоне

 
pivalexander #:

Мне не нужен прозрачный фон или какой то определенный

Мне надо на полупрозрачном фоне любого цвета, выводить текст, так как будто он выводится на белом или совсем прозрачном фоне

а в TextOut()  какие то проблемы с этим, при сглаживании шрифтов на полупрозрачном фоне

Вы меня не поняли 
Черный это все нули, а с нулями, шрифт смешивается некорректно. Поэтому попробуйте черный цвет сделать чуть менее черным. Например 010101
Просто избегайте нулей любого цвета в фоне, когда работаете со шрифтом.
 
Цвет ColorToARGB(Black, 17) это и есть 0x11000000
 
Nikolai Semko #:
Цвет ColorToARGB(Black, 17) это и есть 0x11000000

Может и я вас не понял, а может и вы меня. Вот конкретный пример

#include  <Canvas\Canvas.mqh>

CCanvas   m_canvas5; // the canvas object
CCanvas   m_canvas6; // the canvas object

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   // Вариант с полупрозрачной заливкой 
   if( ! m_canvas5.CreateBitmapLabel(0, 0, "Canvas5", 400, 10, 300, 100, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return;
   }
   m_canvas5.Erase(ColorToARGB(Red, 30));
   m_canvas5.TextOut(30, 40, "Text", ColorToARGB(C'0,0,0', 255));
   m_canvas5.Update();

   // Прозрачный слой с текстом поверх первого полупрозрачного
   if( ! m_canvas6.CreateBitmapLabel(0, 0, "Canvas6", 400, 10, 300, 100, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return;
   }
   m_canvas6.Erase(ColorToARGB(C'0,0,0', 0));
   m_canvas6.TextOut(70, 40, "Text", ColorToARGB(C'0,0,0', 255));
   m_canvas6.Update();   
}


Первый текст отдает красным, второй нормальный

Первый текст нарисован прям на полупрозрачном фоне, второй на прозрачном поверх этого полупрозрачного все с нулями и все четко

Прием тут нули не до конца понял

 
pivalexander #:

Может и я вас не понял, а может и вы меня. Вот конкретный пример


Первый текст отдает красным, второй нормальный

Первый текст нарисован прям на полупрозрачном фоне, второй на прозрачном поверх этого полупрозрачного все с нулями и все четко

Прием тут нули не до конца понял

Блин, пора уже подружиться с Hex форматом для цвета. Это проще, производительные и нагляднее.
Просто замените в вашем первом примере ColorToARGB(Black, 17) на 0x11010101
 
Nikolai Semko #:
Блин, пора уже подружиться с Hex форматом для цвета. Это проще, производительные и нагляднее.
Просто замените в вашем первом примере ColorToARGB(Black, 17) на 0x11010101

Что так ColorToARGB(Black, 17), что так 0x11010101, одно и тоже, что черный текст выводишь, что белый

 
Или я что то не понимаю, в последнем примере, нужно что бы текст на полупрозрачном красном фоне был черный и не получернокрасный 
 
pivalexander #:
Или я что то не понимаю, в последнем примере, нужно что бы текст на полупрозрачном красном фоне был черный и не получернокрасный 
Добрался до компьютера и попробовал. 
Надеялся что замена 0x11000000 на  0x11010101 поможет. Но это помогло лишь на 12,5%. Т.к. из восьми бит только один не ноль. 
Да, это баг MQ смешения текста с фоном как для МТ4, так и для МТ5. 
Вряд ли это исправят. Хотя исправить не сложно. Достаточно просто показать мне кусок кода на C++, отвечающего за вывод текста при альфа канале. И я быстро найду ошибку. Т.к. нужен приличный опыт работы с цветом при альфа канале. 
В Вашей ситуации вы можете на фон   0x11000000 (он же ColorToARGB(C'0,0,0', 17)) выводить текст белого цвета, но полностью прозрачный 0x00FFFFFF (он же ColorToARGB(C'255,255,255', 0))
Но это конечно же не решение, так как цвет шрифта будет не белый, а будет просто отсутствие всякого цвета, т.е. дырка от бублика.
Просто нужно знать об этом баге и постоянно выкручиваться. 
Когда фон чарта черный, то нет проблем. В данном случае нужно было бы выводить белый цвет (0xFFFFFFFF) на полупрозрачный белый (0x11FFFFFF).
Но с белым (думаю с любым не черным) цветом проблему решить сложнее. Возможно использование двух канвасов - это пока лучшее решение.
 

задавал этот вопрос пару лет назад
https://www.mql5.com/ru/forum/1111/page2899#comment_19050408

когда полностью прозначный фон, проблем нет, но с полупрозрачным проблема остается.

Причина обращения: