Как побороть зернистость графика? - страница 3

 
SanAlex:

а куда же можно применить ? ведь хорошо рисует. 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

вот это у Вас прикольно смотрится 


Все канвас. Один объект. Точнее три.
 
Nikolai Semko:

Вы наверное не в курсе, что канвас - это и есть BMP Label, точнее обернутый в класс BMP Label, чтобы было с ним удобнее работать.

Николай, Вы, наверно, не в курсе что мухи на котлетах, это экзотические VIP добавки для усиления аппетита. :) Знаю даже с опарышами едят радуются и говорят как вкусно. А по мне так лучше без этой вкуснячей экзотики. Можно каждое утро трусы через голову надевать. Никто не запрещает. Лишь бы нравилось. Когда привыкнешь будешь думать что все так и делают, и будешь думать что трусы надевают только через голову. И голова как раз для этого и создана. А кто-то ещё пока не знает зачем нужна голова и как нужно надевать нижнее бельё.

Что касается меня я прямо написал что шорты лучше надевать через ноги. Думать что голова нужна для надевания штанов боюсь не совсем верно. Хотя всю жизнь штаны можно надевать через голову, и думать что голова как раз специально создана для надевания штанов, а кто-то ещё не знает для чего создана голова. Здесь только респект автору. И дело вкуса.

Смею ещё раз заметить если Вы все же не уловили это в предыдущем посте. Использование санвас, то есть того, что Вы пишите создано специально для этого, очень долго нудно и мучительно. Для решения многих задач этого делать не обязательно, да и вообще не нужно. Есть стандартный объект, который создан для рисования. Зачем каждый раз надевать штаны через голову? Да и зачем вообще использовать голову для надевания штанов? Зачем усложнять, если можно всё сделать намного проще?

 
ROMAN KIVERIN:

Николай, Вы, наверно, не в курсе что мухи на котлетах, это экзотические VIP добавки для усиления аппетита. :) Знаю даже с опарышами едят радуются и говорят как вкусно. А по мне так лучше без этой вкуснячей экзотики. Можно каждое утро трусы через голову надевать. Никто не запрещает. Лишь бы нравилось. Когда привыкнешь будешь думать что все так и делают, и будешь думать что трусы надевают только через голову. И голова как раз для этого и создана. А кто-то ещё пока не знает зачем нужна голова и как нужно надевать нижнее бельё.

Что касается меня я прямо написал что шорты лучше надевать через ноги. Думать что голова нужна для надевания штанов боюсь не совсем верно. Хотя всю жизнь штаны можно надевать через голову, и думать что голова как раз специально создана для надевания штанов, а кто-то ещё не знает для чего создана голова. Здесь только респект автору. И дело вкуса.

Смею ещё раз заметить если Вы все же не уловили это в предыдущем посте. Использование санвас, то есть того, что Вы пишите создано специально для этого, очень долго нудно и мучительно. Для решения многих задач этого делать не обязательно, да и вообще не нужно. Есть стандартный объект, который создан для рисования. Зачем каждый раз надевать штаны через голову? Да и зачем вообще использовать голову для надевания штанов?

Ладно, ладно. Вам виднее. 
 

1

   uint SamaKartinka[], ShirinaKartinky = 500, WisotaKartinky = 500;
   string NazvanieObekta = "Obekt", NazvanieKartinki = "::Kartinka";//Обязательно добавляем двоеточие
   ArrayResize(SamaKartinka,ShirinaKartinky*WisotaKartinky);
   ObjectCreate(0,NazvanieObekta,OBJ_BITMAP_LABEL,0,0,0);
   ObjectSetString(0,NazvanieObekta,OBJPROP_BMPFILE,NazvanieKartinki);
   ObjectSetInteger(0,NazvanieObekta,OBJPROP_XDISTANCE,400);
   ObjectSetInteger(0,NazvanieObekta,OBJPROP_YDISTANCE,100);
//Здесь рисуем
   for(uint j = 0; j < WisotaKartinky; j++)
      for(uint i = 0; i < ShirinaKartinky; i++)
         SamaKartinka[j*WisotaKartinky+i]=ColorToARGB(((char)(i/2) << 16) + (((i*j)/1000) << 8) + j/2,(char)((i+j)/4));
///////////////////////////////////
//Выводим
   ResourceFree(NazvanieKartinki);
   ResourceCreate(NazvanieKartinki,SamaKartinka,ShirinaKartinky,WisotaKartinky,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE);

Как видно, не сложнее чем с простым объектом няньчится.

Всего навсего два новых слова, которые могут слух резать. Это 

ResourceFree и ResourceCreate

Ну и может 

ColorToARGB

Просто нужно запомнить или выучить. А потом знать что это не так страшно. И всё. Путь открыт. Рисуйте себе на здоровье что угодно.

Файлы:
BMP.mq4  5 kb
 
SanAlex:

я уже задумался - он же в объектах отображается значить от него можно играть дальше, к примеру открыть позицию или закрыть.

 

Да что хотите можете, лишь бы хоть немного связь и логика прослеживалась. А то трудно разобрать, когда непонятно что делает.

Для примера.

3

 
ROMAN KIVERIN:

Вау!!!
 
Nikolai Semko:
Вау!!!

Спасибо, очень тронут. :) Творческих Вам успехов Николай.

 
ROMAN KIVERIN:

uint SamaKartinka[], ShirinaKartinky = 500, WisotaKartinky = 500;
   string NazvanieObekta = "Obekt", NazvanieKartinki = "::Kartinka";//Обязательно добавляем двоеточие
   ArrayResize(SamaKartinka,ShirinaKartinky*WisotaKartinky);
   ObjectCreate(0,NazvanieObekta,OBJ_BITMAP_LABEL,0,0,0);
   ObjectSetString(0,NazvanieObekta,OBJPROP_BMPFILE,NazvanieKartinki);
   ObjectSetInteger(0,NazvanieObekta,OBJPROP_XDISTANCE,400);
   ObjectSetInteger(0,NazvanieObekta,OBJPROP_YDISTANCE,100);
//Здесь рисуем
   for(uint j = 0; j < WisotaKartinky; j++)
      for(uint i = 0; i < ShirinaKartinky; i++)
         SamaKartinka[j*WisotaKartinky+i]=ColorToARGB(((char)(i/2) << 16) + (((i*j)/1000) << 8) + j/2,(char)((i+j)/4));
///////////////////////////////////
//Выводим
   ResourceFree(NazvanieKartinki);
   ResourceCreate(NazvanieKartinki,SamaKartinka,ShirinaKartinky,WisotaKartinky,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE);


Как видно, не сложнее чем с простым объектом няньчится.

Всего навсего два новых слова, которые могут слух резать. Это 

Ну и может 

Просто нужно запомнить или выучить. А потом знать что это не так страшно. И всё. Путь открыт. Рисуйте себе на здоровье что угодно.

тоже самое, только покороче:

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164

void OnStart() {
   int w=500,h=500;
   for(int x = 0; x < w; x++)
      for(int y = 0; y < h; y++)
         Canvas.PixelSet(x+400,y+100,ARGB((x+y)/4,y/2,x*y/1000,x/2));
   Canvas.Update();
   Sleep(10000);
}


Вы, Роман, реально не в курсе что канвас - это и есть  объект OBJ_BITMAP_LABEL

Файлы:
grad_rect.mq5  1 kb
 
Ihor Herasko:

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


С линиями такой проблемы нет. Но отображать область высотой в 100-200 пунктов линиями похоже на перебор. 

Как же оптимально отобразить области малого размера таким же образом, как и достаточно большие области?

Сделайте тип линии пунктир и уберите заливку будет вам счастье)
 
Nikolai Semko:

Блин, почему канвас все считают чем то более сложным, чем рисовать объектами?
Вот вам пример простого индикатора, который рисует линию вслед за движением мышки, причем разноцветную. И эта линия привязана не к координатам, а ко времени и цене. 
Попробуйте сделать тоже самое через объекты. 

Через объкты:

  • кода будет гораздо больше и он будет более трудно читаемым
  • памяти программа будет есть гораздо больше
  • работать будет гораздо медленнее

Зачем тогда использовать объеты, тем более они очень ограничены по своим возможностям.
Как раз для быстрой оценки и визуализации проще использовать канвас. Правда лучше с моим классом iCanvas.

Объекты доступны для чтения со всеми своими свойствами. Индикаторные буфферы еще лучше для этого приспособлены.

При рисовании на канве нужно делать свое АПИ для доступа к внутренним объектам. Например, если нарисовали свечи, чтобы получить их значения ОХЛЦ нужно писать свои функции для доступа к этим данным.