La tela è forte! - pagina 10

 
Реter Konow:

Grazie, Nikolai. Non dimenticherò il tuo sacrificio! :)

Hai preso in giro :)))
 
Easy Canvas
Easy Canvas
  • www.mql5.com
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas. Вот пример простого индикатора с применением данной библиотеки и его демонстрация. Обратите внимание, что в данном примере в теле индикатора отсутствует функция обработки событий OnChartEvent. Но она также может и присутствовать. Особенности данной библиотеки...
 

Dimostrazione di un semplice morphing di immagini raster bmp.

//+------------------------------------------------------------------+
//|                                                        Morph.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property link      "SemkoNV@bk.ru"  
#property version   "1.01"
#property indicator_chart_window
#define protected public
#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164
#undef protected
#resource  "\\Images\\wave02.bmp"
#resource  "\\Images\\stone2.bmp"

input int MorphPeriod=3000; // период морфинга в миллисекундах 

string bmp1="::Images\\wave02.bmp";
string bmp2="::Images\\stone2.bmp";
int width_bmp1,height_bmp1;
int width_bmp2,height_bmp2;
uint BMP1[],BMP2[],scr1[],scr2[];
int N;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ChartSetInteger(0,CHART_FOREGROUND,true);
   if(!ResourceReadImage(bmp1,BMP1,width_bmp1,height_bmp1)) Print("Error read resource: ",GetLastError()); //  bmp file to array BMP1[]
   if(!ResourceReadImage(bmp2,BMP2,width_bmp2,height_bmp2)) Print("Error read resource: ",GetLastError()); //  bmp file to array BMP2[]
   ResourceFree(bmp1);
   ResourceFree(bmp2);
   BackGraundBmp(BMP1,Canvas,width_bmp1,height_bmp1);
   ArrayCopy(scr1,Canvas.m_pixels);
   BackGraundBmp(BMP2,Canvas,width_bmp2,height_bmp2);
   ArrayCopy(scr2,Canvas.m_pixels);
   EventSetMillisecondTimer(30);
   N=MorphPeriod/32;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   static long j=0;
   static int w=Canvas.m_width;
   static int h=Canvas.m_height;
   if(w!=Canvas.m_width || h!=Canvas.m_height) // если изменился размер окна, то перерисовываем фон
     {
      BackGraundBmp(BMP1,Canvas,width_bmp1,height_bmp1);
      ArrayCopy(scr1,Canvas.m_pixels);
      BackGraundBmp(BMP2,Canvas,width_bmp2,height_bmp2);
      ArrayCopy(scr2,Canvas.m_pixels);
      w=Canvas.m_width;
      h=Canvas.m_height;
     }
   long k=j%(2*N);
   k=(k<N)?k:(2*N-1-k);
   Morph(Canvas,scr1,scr2,k/double(N));
   Canvas.Update();
   j++;
  }
//+------------------------------------------------------------------+
void BackGraundBmp(uint &arr[],iCanvas &C,int &w,int &h)
  {
   int SizeArr=w*h;
   int pos=0,posBMP=0;
   int len=(C.m_width<w)?C.m_width:w;
   while(pos<(C.m_width*C.m_height))
     {
      int X=0;
      while(X<C.m_width)
        {
         int Len=C.m_width-X;
         if(Len>len) Len=len;
         ArrayCopy(C.m_pixels,arr,pos+X,posBMP,Len);
         X+=len;
        }
      pos+=C.m_width;
      posBMP+=w;
      if(posBMP>=SizeArr) posBMP=0;
     }
  }
//+------------------------------------------------------------------+

void Morph(iCanvas &C,uint &arr1[],uint &arr2[],double p) // p  - 0..1, размеры массивов arr1, arr2 и m_pixels должны быть одинаковые
  {
   argb pix,pix1,pix2;
   int size=ArraySize(Canvas.m_pixels);
   for(int i=0; i<size;i++)
     {
      pix1.clr=arr1[i];
      pix2.clr=arr2[i];
      pix.c[0]=pix1.c[0]+(uchar)Round(((int)pix2.c[0]-(int)pix1.c[0])*p);
      pix.c[1]=pix1.c[1]+(uchar)Round(((int)pix2.c[1]-(int)pix1.c[1])*p);
      pix.c[2]=pix1.c[2]+(uchar)Round(((int)pix2.c[2]-(int)pix1.c[2])*p);
      pix.c[3]=255;
      C.m_pixels[i]=pix.clr;
     }
  }
//+------------------------------------------------------------------+
Per favore, non scrivete commenti come: come influisce sul trading? Come può essere utile? ecc.
Tali commenti nel ramo, che dimostra le capacità di Kanvas, io personalmente, almeno, saranno percepiti come una manifestazione di non professionalità.
File:
Morph.ZIP  738 kb
 
Nikolai Semko:
Tali commenti in un thread dove si dimostrano le capacità di kanvas, personalmente, come minimo, sarebbero percepiti da me come una manifestazione di non professionalità.

LOL

Io, da profano, posso solo confermare che sembra ottimo, ma non so dove applicare il tutto. Uniamoci al club di Peter Konov.

 
Nikolai Semko:

Dimostrazione di un semplice morphing di immagini raster bmp.

Per favore, non scrivete commenti come: come influisce questo sul trading? come può essere utile? ecc.
Questo tipo di commenti in un ramo che dimostra le capacità di Kanvas, io personalmente, come minimo, sarà percepito come una manifestazione di non professionalità.

No, questo non è morphing. Chiamare morphing è una forzatura:


In generale, ero troppo pigro per farne uno vero da solo - ho trovato degli esempi nelle cartelle.

 
Artyom Trishkin:

No, questo non è morphing. È una forzatura chiamarlo morphing:


In realtà, ero troppo pigro per farne uno vero io stesso - l'ho trovato nelle cartelle di esempio.

Dov'è il morphing qui? Naturalmente, in questo caso, non è cruciale per i nostri scopi, ma comunque. Definizione Wiki di morphing:

Ilmorphingè una tecnologia nella computer animation, un effetto visivo che crea l'impressione di una trasformazione liscia di un oggetto in un altro.

Tuttavia, il primo esempio è più simile a questo effetto, imho.

 
Andrei Novichkov:

Dov'è il morphing qui? Certo, non è cruciale per i nostri scopi qui, ma comunque. Definizione Wiki di morphing:

Ilmorphingè una tecnologia nell'animazione computerizzata, un effetto visivo che crea l'impressione di una trasformazione morbida di un oggetto in un altro.

Il primo esempio è più simile a questo effetto, imho.

Dove nel primo esempio di trasformazione liscia? Nel secondo, tutto si trasforma in modo completamente fluido in ogni fotogramma da una forma all'altra (morphing). E nel primo, è solo un cambio di immagini con dissolvenza e sfocatura. Volevo fare il morphing facciale da umano in una specie di bestia, ma non volevo perdere tempo. Io, che lavoravo in TV e facevo pubblicità in 3D Studio MAX, non dovrei conoscere il morphing :)

 

E so anche lavorare in Max )))) E non solo in esso )) E ho lavorato anche con la televisione. Uno dei documentari per cui ho fatto uno splash screen ha vinto un premio non molto tempo fa.)

Naturalmente, sarebbe ingenuo considerare il primo esempio come un morphing nel pieno senso della parola. Ma Artem, arruffare la gonna di una ragazza non è esattamente la stessa cosa. Non pre-morphing ) Se solo la sua gonna si trasformasse in un elefante, sarebbe diverso )))))).

 
Andrei Novichkov:

E so anche lavorare in Max )))) E non solo in esso )) E ho lavorato anche con la televisione. Uno dei documentari per cui ho fatto una sceneggiatura ha vinto un premio non molto tempo fa))

Naturalmente, sarebbe ingenuo considerare il primo esempio come un morphing nel pieno senso della parola. Ma Artem, arruffare la gonna di una ragazza non è esattamente la stessa cosa. Non pre-morfismo) Se solo la sua gonna si trasformasse in mmmmm un elefante, sarebbe un'altra questione )))))).

:)

È quello che ho detto, un po' esagerato. Ma non stavo parlando della gonna, dove l'increspatura è probabilmente già precalcolata (non stavo guardando), ma del manichino stesso - puoi farlo muovere in diversi modi, anche con il modificatore "Morphing", che sarebbe solo morphing. Ma probabilmente spostano il bipede - non lo so, non ho guardato.

 
Artyom Trishkin:

:)

È quello che ho detto, un po' esagerato. Ma non stavo parlando della gonna, dove l'oscillazione è probabilmente già precalcolata (non stavo guardando), ma del manichino stesso - puoi farlo muovere in diversi modi, anche con il modificatore "Morphing", che sarebbe solo morphing. Ma probabilmente spostano il bipede - non lo so, non ho guardato.

Non credo affatto che sia Max. Com'è il software di modellazione dell'abbigliamento?

I movimenti della modella sono buoni, il modo in cui cammina. Forse è solo una ragazza coperta di sensori. Ma i movimenti delle braccia, mi sembra, non finito e si è rivelato come se il bodybuilder va a spingere fuori un mobile)).

Il modello stesso potrebbe essere un po' più bello. È un cannibale di "Call of Cthulhu".

Forte e chiaro )))). Probabilmente dovremmo concludere.