Вопрос для спецов по графическим объектам...

 

Вот имеем такую Bmp картинку :

 

Эта картинка накладывается на другую картинку такого же размера,

и мне надо чтобы все части нижней картинки, которые не пересекаются

с телом зеленой стрелки были видимы.

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

 

Какое-то решение существует ? 

 
more:

Вот имеем такую Bmp картинку :

 

Эта картинка накладывается на другую картинку такого же размера,

и мне надо чтобы все части нижней картинки, которые не пересекаются

с телом зеленой стрелки были видимы.

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

 

Какое-то решение существует ? 

 

У .bmp же нет прозрачности. А, если мне память не изменяет, то с другими форматами изображений не работаем-с.

Что именно-то нужно? Мож есть совсем иное решение...

 
more:

Вот имеем такую Bmp картинку :

 

Эта картинка накладывается на другую картинку такого же размера,

и мне надо чтобы все части нижней картинки, которые не пересекаются

с телом зеленой стрелки были видимы.

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

 

Какое-то решение существует ? 

 


Можно сложить два ресурса и отобразить в третьем
 


 В пэйнте можно накладку делать, немного тренировки и все ОК.

 ------------------

Поле вокруг твоей стрелки - белое и белое с красным периметром, а через серый фон - не видно 

 
more:

Вот имеем такую Bmp картинку :

 

Эта картинка накладывается на другую картинку такого же размера,

и мне надо чтобы все части нижней картинки, которые не пересекаются

с телом зеленой стрелки были видимы.

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

 

Какое-то решение существует ? 

 


*.bmp картинка может иметь альфа-канал - т.е. можно сделать фон картинки прозрачным. Но вот, чтобы наложить две картинки на одном объекте OBJ_BITMAP - просто так не получится.

Если действительно нужно делать смешение двух картинок - то тогда так: создавать ресурс для каждой картинки и один для окончательного вывода и обрабатывать наложение. Вот только алгоритма наложения на mql нет, нужно будет писать самостоятельно.

 
barabashkakvn:

*.bmp картинка может иметь альфа-канал - т.е. можно сделать фон картинки прозрачным. Но вот, чтобы наложить две картинки на одном объекте OBJ_BITMAP - просто так не получится.

Прозрачность у BMP есть, картинки в ресурсы, все будет ок. Один объект на другой, зачем в одном?
 

  

Основа рисунка семафор, кругляшки (красный или зеленый) входят в окошко и появляется комбинация 

 
TheXpert:
Прозрачность у BMP есть, картинки в ресурсы, все будет ок. Один объект на другой, зачем в одном?


Действительно, получается:

//+------------------------------------------------------------------+
//|                                           2_OBJ_BITMAP_LABEL.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
string label_name_1="currency_label_1";        // имя объекта OBJ_BITMAP_LABEL 
string label_name_2="currency_label_2";        // имя объекта OBJ_BITMAP_LABEL 

#resource "\\Images\\euro.bmp"
#resource "\\Images\\dollar_alfa.bmp"

string euro="\\Images\\euro.bmp";    // путь к файлу каталог_данных_терминала\MQL5\Images\euro.bmp
string dollar="\\Images\\dollar_alfa.bmp";  // путь к файлу каталог_данных_терминала\MQL5\Images\dollar.bmp
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!CreateBitmapLabel(label_name_1,10) || !CreateBitmapLabel(label_name_2,20))
      return(INIT_FAILED);  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Create the OBJ_BITMAP_LABEL                                      |
//+------------------------------------------------------------------+
bool CreateBitmapLabel(string name,int distance=20)
  {
//--- создадим кнопку OBJ_BITMAP_LABEL, если ее еще нет
   if(ObjectFind(0,name)<0)
     {
      //--- попробуем создать объект OBJ_BITMAP_LABEL
      bool created=ObjectCreate(0,name,OBJ_BITMAP_LABEL,0,0,0);
      if(created)
        {
         //--- привяжем кнопку к правому верхнему углу графика
         ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
         //--- теперь настроим свойства объекта
         ObjectSetInteger(0,name,OBJPROP_XDISTANCE,100+distance);
         ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50+distance);
         //--- сбросим код последней ошибки в 0
         ResetLastError();
         //--- загрузим картинку для состояния кнопки "Нажата"
         bool set=ObjectSetString(0,name,OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
         //--- проверим результат
         if(!set)
           {
            PrintFormat("Не удалось загрузить картинку из файла %s. Код ошибки %d",euro,GetLastError());
            return(false);
           }
         ResetLastError();
         //--- загрузим картинку для состояния кнопки "Отжата"
         set=ObjectSetString(0,name,OBJPROP_BMPFILE,1,"::Images\\dollar_alfa.bmp");

         if(!set)
           {
            PrintFormat("Не удалось загрузить картинку из файла %s. Код ошибки %d",dollar,GetLastError());
            return(false);
           }
         //--- отдадим графику команду на обновление, чтобы кнопка появилась сразу же, не дожидаясь тика
         ChartRedraw(0);
        }
      else
        {
         //--- объект создать не удалось, сообщим об этом
         PrintFormat("Не удалось создать объект OBJ_BITMAP_LABEL. Код ошибки %d",GetLastError());
         return(false);
        }
     }
   return(true);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- удалим объект с графика 
//ObjectDelete(0,label_name);
  }
//+------------------------------------------------------------------+
Файлы:
images.zip  10 kb
 

Что интересно, треугольники линиями видны на переднем фоне, а которые сплошной заливкой - нет 

 
barabashkakvn:


Действительно, получается:


слушай, друг, дейсвительно то что надо, молодец !

я так понял ты в формате PNG сделал фон доллара невидимым, а потом снова перевел доллар

в формат Bmp, а невидимость сохранилась.

я с графическими инструментами (фотошоп и пр.) не очень дружу,

подскажи как в формате PNG сделать фон невидимым...фотошоп ?

 
more:


слушай, друг, дейсвительно то что надо, молодец !

я так понял ты в формате PNG сделал фон доллара невидимым, а потом снова перевел доллар

в формат Bmp, а невидимость сохранилась.

я с графическими инструментами (фотошоп и пр.) не очень дружу,

подскажи как в формате PNG сделать фон невидимым...фотошоп ?

Графический редактор - Paint.NET. Это небольшой и бесплатный редактор. В этом редакторе я выделяю тот цвет или ту область, которые должны быть невидимыми и удаляю (клавиша "Del"). Затем сохраняю этот рисунок в *.png 32-bit.

Для переделки *.png в *.bmp с альфа-каналом используется еще одна крохотная программка AlphaConv. Алгоритм такой - в программке выбираете *.bmp (это формат в который будет преобразован рисунок) и на программку AkhpaConv перетаскиваете мышкой свой  *.png 32-bit рисунок. Через мгновение в папке с Вашим рисунком появится *.bmp 32-bit и с прозрачным каналом.

Файлы:
alphaconv.zip  453 kb