Есть ли возможность в объекте OBJ_TEXT выводить текст в несколько строк? - страница 5

 
Nikolai Semko:

здесь еще другая проблема.
Если у вас нет доступа к коду, сгенерившего канвас, то у вас и нет доступа к ресурсу этого канваса. Список битмап  объектов вы можете видеть, но не список ресурсов. Если не знаете имя ресурса, то узнать его можно только методом подбора или перебора, а это за пределами практического применения.
Как получить массив точек для распознания? Если только через скриншот, что тоже бред.
Или я не прав?

Код естественно мой, а значит открытый. Просто я подумал, что если есть дата на экране, то зачем ещё куда-то её сохранять, если можно получить ... при условии, что можно получить. ха-ха-ха, "красиво" сказал.

Ну что-то типа как из текстового поля можно получить строку и вытащить оттуда часть строки. Но, увы, нет так нет.

 
Andrey Barinov:

В свойстве битмапа есть путь к ресурсу. Не знаю, можно ли это получить программно.


Вот именно. Ведь вопрос был не из картинки получить, а из ресурса. А потом я и сам потерял что искал. Поэкспериментирую, какие свойства можно будет получить


Ничего у меня не получается...

  string resource = "\\Scripts\\Test\\Canvas\\00.ex5::aaa";     // получили путь к ресурсу созданному другим скриптом

//  if(ObjectGetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))
  if(ObjectSetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))   // работает любая строка, хоть эта, хоть закомментированная выше
   {
    Print(ObjectGetString(0, "aaa", OBJPROP_NAME));             // имя есть
    Print(ObjectGetString(0, "aaa", OBJPROP_BMPFILE));          // путь к ресурсу есть
    Print(ObjectGetString(0, "aaa", OBJPROP_TEXT));             // текста нету.....
    Print(ObjectGetInteger(0, "aaa", OBJPROP_XDISTANCE));       // это значение тоже есть
   }

А как получить массив я не нахожу. Есть-ли возможность вообще???

 
Alexey Viktorov:

Вот именно. Ведь вопрос был не из картинки получить, а из ресурса. А потом я и сам потерял что искал. Поэкспериментирую, какие свойства можно будет получить


Ничего у меня не получается...

А как получить массив я не нахожу. Есть-ли возможность вообще???

Думаю должен помочь ResourceReadImage(), или как-то так

 
Alexey Viktorov:

Код естественно мой, а значит открытый. Просто я подумал, что если есть дата на экране, то зачем ещё куда-то её сохранять, если можно получить ... при условии, что можно получить. ха-ха-ха, "красиво" сказал.

Ну что-то типа как из текстового поля можно получить строку и вытащить оттуда часть строки. Но, увы, нет так нет.

Ну Вы даёте :))
Чемодан с батарейками к научным часам - это, действительно, не лучшее решение, хотя и креативное.  
 
Andrey Barinov:
Думаю должен помочь ResourceReadImage(), или как-то так

Я нашёл его, но ничего у меня не получилось. Пытался массив в строку перевести, но типы массивов не совпадают. Как ни крутил нихрена не получается. Может что-то не так делаю. но пока нет новых мыслей.

 
Alexey Viktorov:

Я нашёл его, но ничего у меня не получилось. Пытался массив в строку перевести, но типы массивов не совпадают. Как ни крутил нихрена не получается. Может что-то не так делаю. но пока нет новых мыслей.

Как данные цветов пикселей перевести в строку? А главное зачем? 
Получите картинку растровую, а далее ее можно пытаться распознать, но это отдельная наука :)
 
Nikolai Semko:
Ну Вы даёте :))
Чемодан с батарейками к научным часам - это, действительно, не лучшее решение, хотя и креативное.  

Николай, но это ведь не то решение которое обязательно к применению. Ведь ваши мультики из той-же серии, красиво, но без возможности применения в трейдинге.

 
Andrey Barinov:
Как данные цветов пикселей перевести в строку? А главное зачем? 
Получите картинку растровую, а далее ее можно пытаться распознать, но это отдельная наука :)

А.., ну, эта... не знаю.)))

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

 

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

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

fxsaber, 2017.10.31 08:11

// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


Применение

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


ЗЫ Так же реализовывается конвертер файлов BMP->GIF/PNG.

 
Alexey Viktorov:

Новый вопрос: Можно-ли прочесть текст из ресурса в канвасе?

К примеру эти строки, или любую из них.

Цель: При помощи канваса есть строка которая содержит дату. Вот эту дату и желательно прочесть.

Либо применить один из старых проверенных способов, GV, файл, графика или ещё чего-то.

Можно прочесть данные из ресурса с помощью ResourceReadImage, но для этого их нужно туда записать с помощью ResourceCreate. Функция ResourceCreate принимает только массив данных типа uint и если нам нужно записать массив данных другого типа, нужно воспользоваться union. Объявить в нем несколько массивов разных типов. После этого, мы можем сохранять в ресурсе любые данные, в том числе и строки. Для преобразования строки в тип char используйте StringToCharArray, а обратно - CharArrayToString. Таким образом, дело вовсе не в канвасе, а в ресурсе, в который с помощью юнионов можно записывать любые типы данных.
Причина обращения: