Вот имеем такую Bmp картинку :
Эта картинка накладывается на другую картинку такого же размера,
и мне надо чтобы все части нижней картинки, которые не пересекаются
с телом зеленой стрелки были видимы.
т.е мне надо все пикселя вокруг зеленой стрелки сделать абсолютно прозрачными.
Какое-то решение существует ?
У .bmp же нет прозрачности. А, если мне память не изменяет, то с другими форматами изображений не работаем-с.
Что именно-то нужно? Мож есть совсем иное решение...
Вот имеем такую Bmp картинку :
Эта картинка накладывается на другую картинку такого же размера,
и мне надо чтобы все части нижней картинки, которые не пересекаются
с телом зеленой стрелки были видимы.
т.е мне надо все пикселя вокруг зеленой стрелки сделать абсолютно прозрачными.
Какое-то решение существует ?
Можно сложить два ресурса и отобразить в третьем
В пэйнте можно накладку делать, немного тренировки и все ОК.
------------------
Поле вокруг твоей стрелки - белое и белое с красным периметром, а через серый фон - не видно
Вот имеем такую Bmp картинку :
Эта картинка накладывается на другую картинку такого же размера,
и мне надо чтобы все части нижней картинки, которые не пересекаются
с телом зеленой стрелки были видимы.
т.е мне надо все пикселя вокруг зеленой стрелки сделать абсолютно прозрачными.
Какое-то решение существует ?
*.bmp картинка может иметь альфа-канал - т.е. можно сделать фон картинки прозрачным. Но вот, чтобы наложить две картинки на одном объекте OBJ_BITMAP - просто так не получится.
Если действительно нужно делать смешение двух картинок - то тогда так: создавать ресурс для каждой картинки и один для окончательного вывода и обрабатывать наложение. Вот только алгоритма наложения на mql нет, нужно будет писать самостоятельно.
*.bmp картинка может иметь альфа-канал - т.е. можно сделать фон картинки прозрачным. Но вот, чтобы наложить две картинки на одном объекте OBJ_BITMAP - просто так не получится.
Прозрачность у 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); } //+------------------------------------------------------------------+
Действительно, получается:
слушай, друг, дейсвительно то что надо, молодец !
я так понял ты в формате PNG сделал фон доллара невидимым, а потом снова перевел доллар
в формат Bmp, а невидимость сохранилась.
я с графическими инструментами (фотошоп и пр.) не очень дружу,
подскажи как в формате PNG сделать фон невидимым...фотошоп ?
слушай, друг, дейсвительно то что надо, молодец !
я так понял ты в формате PNG сделал фон доллара невидимым, а потом снова перевел доллар
в формат Bmp, а невидимость сохранилась.
я с графическими инструментами (фотошоп и пр.) не очень дружу,
подскажи как в формате PNG сделать фон невидимым...фотошоп ?
Графический редактор - Paint.NET. Это небольшой и бесплатный редактор. В этом редакторе я выделяю тот цвет или ту область, которые должны быть невидимыми и удаляю (клавиша "Del"). Затем сохраняю этот рисунок в *.png 32-bit.
Для переделки *.png в *.bmp с альфа-каналом используется еще одна крохотная программка AlphaConv. Алгоритм такой - в программке выбираете *.bmp (это формат в который будет преобразован рисунок) и на программку AkhpaConv перетаскиваете мышкой свой *.png 32-bit рисунок. Через мгновение в папке с Вашим рисунком появится *.bmp 32-bit и с прозрачным каналом.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот имеем такую Bmp картинку :
Эта картинка накладывается на другую картинку такого же размера,
и мне надо чтобы все части нижней картинки, которые не пересекаются
с телом зеленой стрелки были видимы.
т.е мне надо все пикселя вокруг зеленой стрелки сделать абсолютно прозрачными.
Какое-то решение существует ?