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

 

Если на полупрозрачном канвасе ColorToARGB(Black, 17) выводить белый текст ColorToARGB(White, 255), получается какая то ерунда



Если фон залить таким же цветом, но не прозрачным ColorToARGB(C'238,238,238', 255), то тот же текст выглядит нормально


Как бы на полупрозрачном фоне, получить нормальный текст, пока решение использовать два канваса, один с полупрозрачным фоном, другой с прозрачным фоном на котором текст, если наложить их друг на друга в разных битмап лэйблах, то на графике текст отображается нормально как на втором скрине, но это не совсем удобно, хотело бы все рисовать в одной картинке 

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

 
pivalexander:


На Ваше сообщения обратят внимание, если Вы потрудитесь и сразу предоставите пример.

Например вот такой:

//+------------------------------------------------------------------+
//|                                                       Canvas.mq5 |
//|                         Copyright © 2016-2022, Vladimir Karputov |
//|                      https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 20162022, Vladimir Karputov"
#property link      "https://www.mql5.com/en/users/barabashkakvn"
#property version   "1.001"
#include <Canvas\Canvas.mqh>
CCanvas     m_canvas;           // the canvas object
#property script_show_inputs
//--- input parameters
input group             "Text"
input color                InpTextColor   = clrWhite;                   // Text Color
input uchar                InpTextAlfa    = 255;                        // Text Alpha
input group             "Canvas"
input color                InpCanvasColor = clrBlack;                   // Canvas Color
input uchar                InpCanvasAlfa  = 17;                         // Canvas Alpha
input ENUM_COLOR_FORMAT    InpCanvasFormat=COLOR_FORMAT_ARGB_NORMALIZE; // Canvas Format
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- create canvas
   if(!m_canvas.CreateBitmapLabel(0,0,"Canvas",10,10,300,300,InpCanvasFormat))
     {
      Print("Error creating canvas: ",GetLastError());
      return;
     }
   m_canvas.Erase(ColorToARGB(InpCanvasColor,InpCanvasAlfa));
   m_canvas.TextOut(30,10,"Text",ColorToARGB(InpTextColor,InpTextAlfa));
   m_canvas.Update();
   Sleep(60000);
  }
//+------------------------------------------------------------------+
Файлы:
Canvas.mq5  4 kb
 

Готово

//+------------------------------------------------------------------+
//|                                                       Canvas.mq5 |
//|                         Copyright © 2016-2022, Vladimir Karputov |
//|                      https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 20162022, Vladimir Karputov"
#property link      "https://www.mql5.com/en/users/barabashkakvn"
#property version   "1.001"
#include  <Canvas\Canvas.mqh>

CCanvas   m_canvas1; // the canvas object
CCanvas   m_canvas2; // the canvas object

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

   //---
   
   // Вариант с непрозрачной заливкой 
   if( ! m_canvas2.CreateBitmapLabel(0, 0, "Canvas2", 10, 120, 300, 100, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return;
   }
   m_canvas2.Erase(ColorToARGB(C'238,238,238', 255));
   m_canvas2.TextOut(30, 30, "Text", ColorToARGB(C'255,255,255', 255));
   m_canvas2.Update();
}
 
pivalexander #:

Готово

А прикрепить файл забыли? 

 

Вариант с двумя картинками друг на друге

//+------------------------------------------------------------------+
//|                                                       Canvas.mq5 |
//|                         Copyright © 2016-2022, Vladimir Karputov |
//|                      https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 20162022, Vladimir Karputov"
#property link      "https://www.mql5.com/en/users/barabashkakvn"
#property version   "1.001"
#include  <Canvas\Canvas.mqh>

CCanvas   m_canvas1; // the canvas object
CCanvas   m_canvas2; // the canvas object

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

   //---
   
   // Вариант с непрозрачной заливкой 
   if( ! m_canvas2.CreateBitmapLabel(0, 0, "Canvas2", 10, 10, 300, 100, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return;
   }
   m_canvas2.Erase(ColorToARGB(C'255,255,255', 0));
   m_canvas2.TextOut(30, 30, "Text", ColorToARGB(C'255,255,255', 255));
   m_canvas2.Update();
}
 
Vladimir Karputov #:

А прикрепить файл забыли? 

Можно текст кода выделить, скопировать и будет содержимое файла

 
pivalexander #:

Можно текст кода выделить, скопировать и будет содержимое файла

А прикрепить файл забыли?

Зачем кому-то делать лишние движения? Нет файла - нет помощи.
 
Vladimir Karputov #:

А прикрепить файл забыли?

Зачем кому-то делать лишние движения? Нет файла - нет помощи.

Готово

Файлы:
Canvas.mq4  5 kb
 
pivalexander #:

Вариант с двумя картинками друг на друге

m_canvas2.TextOut(30, 30, "Text", ColorToARGB(
clrBlack ));
 
pivalexander:

Если на полупрозрачном канвасе ColorToARGB(Black, 17) выводить белый текст ColorToARGB(White, 255), получается какая то ерунда



Если фон залить таким же цветом, но не прозрачным ColorToARGB(C'238,238,238', 255), то тот же текст выглядит нормально


Как бы на полупрозрачном фоне, получить нормальный текст, пока решение использовать два канваса, один с полупрозрачным фоном, другой с прозрачным фоном на котором текст, если наложить их друг на друга в разных битмап лэйблах, то на графике текст отображается нормально как на втором скрине, но это не совсем удобно, хотело бы все рисовать в одной картинке 

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

Знаю, как решить эту проблему.
Чуть позже отвечу, если меня никто не опередит. Просто не за компом.
А пока можете обратить внимание на это сообщение:
Вполне возможно -этого будет достаточно и сами догадаетесь.
 
Nikolai Semko #:
Знаю, как решить эту проблему.
Чуть позже отвечу, если меня никто не опередит. Просто не за компом.
А пока можете обратить внимание на это сообщение:
Вполне возможно -этого будет достаточно и сами догадаетесь.

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

.Erase(0x00FFFFFF);

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

.Erase(ColorToARGB(C'255,255,255', 0));

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