BMP как ресурсы в индикаторе

 

Столкнулся с проблемой, компилятор ругается на .bmp в ресурсах. Есть ограничения по формату? В доке ни слова об этом. Значки в зипе приаттачил.

#resource "\\Images\\BtnGreen.bmp"
#resource "\\Images\\BtnRed.bmp"
#resource "\\Images\\BtnYellow.bmp"
#resource "\\Images\\CircleGreen.bmp"
#resource "\\Images\\CircleRed.bmp"
#resource "\\Images\\CircleYellow.bmp"

***************
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\BtnGreen1.bmp'     TickFinder.mq4  12      1
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\BtnRed.bmp'        TickFinder.mq4  13      1
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\BtnYellow.bmp'     TickFinder.mq4  14      1
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\CircleGreen.bmp'   TickFinder.mq4  15      1
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\CircleRed.bmp'     TickFinder.mq4  16      1
unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\CircleYellow.bmp'  TickFinder.mq4  17      1
Файлы:
Images.zip  6 kb
 
VDev:

Столкнулся с проблемой, компилятор ругается на .bmp в ресурсах. Есть ограничения по формату? В доке ни слова об этом. Значки в зипе приаттачил.

По какому пути у Вас находятся Ваши картинки? Должны находится в каталог_данных_терминала\MQL5\Images\.

P.S. Как именно вы потом используете ресурс? 

 
barabashkakvn:

По какому пути у Вас находятся Ваши картинки? Должны находится в каталог_данных_терминала\MQL5\Images\.

P.S. Как именно вы потом используете ресурс? 

Пути правильные, видно из сообщения компилятора. Он ругался на строчках #resource "\\Images\\BtnGreen.bmp", еще до какого-либо использования.

Вопрос решил. Дело в том, что есть два формата BMP - OS/2 и Windows. Я изначально сделал картинки в Corel, а там только формат OS/2 и компилятор его не распознает. Загнал картинки в фотошоп, сохранил в формате Windows, теперь все ОК.

Я в граф. форматах не спец, считать ли это ошибкой и надо ли писать в сервисдек?

 
VDev:

Пути правильные, видно из сообщения компилятора. Он ругался на строчках #resource "\\Images\\BtnGreen.bmp", еще до какого-либо использования.

Вопрос решил. Дело в том, что есть два формата BMP - OS/2 и Windows. Я изначально сделал картинки в Corel, а там только формат OS/2 и компилятор его не распознает. Загнал картинки в фотошоп, сохранил в формате Windows, теперь все ОК.

Я в граф. форматах не спец, считать ли это ошибкой и надо ли писать в сервисдек?

Думаю раз терминал создан первоначально под Windows, значит и все его "части" (редактор например) должны работать в первую очередь с родными Windows форматами. Т.е. это не ошибка.
 
papaklass:
В сервисдеск написать стоит хотя бы для того, чтобы компилятор сообщал об ошибке: "не совместимый с Windows формата ресурса".

Так компилятор и пишет такое сообщение

unsupported image format 'C:\Forex\School\MasterClassECN\MQL4\Images\BtnGreen1.bmp'     TickFinder.mq4  12      1
 

Спасибо хоть подсказали где искать "собаку". 

Для тех кто не умеет пользоваться фотошопом и не хочет его ставить ради одной иконки - можно сохранить в Paint только с одном форматом (остальные перепробовала - не работают)

 
Galina Bobro:

Для тех кто не умеет пользоваться фотошопом и не хочет его ставить ради одной иконки - можно сохранить в Paint только с одном форматом (остальные перепробовала - не работают)

Кроме фотошопа есть paint.net, там есть возможность сохранения 32-битного bmp если установить плагин.

И есть еще такая штука, которая делает их из png

PNG to 32bit BMP
PNG to 32bit BMP
  • pngtobmp32.codeplex.com
This simple application converts PNG image files to 32 bit BMP image files which support transparency (alpha value).
 

Интересно, что bmp внутри не жмутся, раздувая ex4/5-файл. Сам ресурсы в исходнике не прописываю - беру со стороны

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.11.06 15:54

#include <Canvas\Canvas.mqh>

// Помещает картинку в ресурс
bool ToResource( const string Name, const uint &Data[], const uint Width )
{
  return(::ResourceCreate(Name, Data, Width, (Width == 0) ? ::ArraySize(Data) : ::ArraySize(Data) / Width, 0, 0, Width, ::COLOR_FORMAT_ARGB_NORMALIZE));
}

// Прием использования protected полей/методов
class CANVAS : public CCanvas
{
public:
  // Загрузка картинки из BMP-файла
  static bool BMPToArray( const string FileName, uint &Data[], int &Width )
  {
    CANVAS Canvas;
    
    const bool Res = Canvas.LoadFromFile(FileName);
    
    if (Res)
    {
      ArrayCopy(Data, Canvas.m_pixels);
      
      Width = Canvas.m_width;
    }
    
    return(Res);
  }
};

// Грузим BMP с альфаканалом не из ресурса, а из файла
void OnStart()
{     
  const string Resource = "::Resource";
         
  uint Data[], Width;   
  
  if (CANVAS::BMPToArray("Picture.bmp", Data, Width) &&
      ToResource(Resource, Data, Width))
  {
   ObjectCreate(0, __FILE__, OBJ_BITMAP_LABEL, 0, 0, 0);   
   ObjectSetString(0, __FILE__, OBJPROP_BMPFILE, Resource);
        
   // Сконвертировали BMP в PNG (без учета прозрачности)
   BitmapObjectToFile(0, __FILE__, "Picture.png"); // https://www.mql5.com/ru/forum/170952/page57#comment_5985505
  }
}
 

Опытным путем установил, что Метатрейдер 5 всегда принимает файлы фотошопа, если при сохранении выбрать:

 

 
fxsaber:

Интересно, что bmp внутри не жмутся, раздувая ex4/5-файл. Сам ресурсы в исходнике не прописываю - беру со стороны

Жмутся и очень даже хорошо. Просто не надо пихать BMP размером на гигабайт, упрощайте графику максимально. Например 700кб практически не заметен в советнике

 
Konstantin Efremov:

Жмутся и очень даже хорошо. Просто не надо пихать BMP размером на гигабайт, упрощайте графику максимально. Например 700кб практически не заметен в советнике

Читайте иногда дату сообщения, на которое решили ответить.

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