La toile est cool ! - page 10

 
Реter Konow:

Merci, Nicholas. Je n'oublierai pas votre sacrifice ! :)

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

Démonstration d'un simple morphing d'image bmp raster.

//+------------------------------------------------------------------+
//|                                                        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;
     }
  }
//+------------------------------------------------------------------+
Veuillez ne pas écrire de commentaires du type : comment cela affecte-t-il le commerce ? comment cela peut-il être utile ? etc.
De tels commentaires dans la branche, qui démontre les capacités de Kanvas, moi personnellement, au moins, seront perçus comme une manifestation de non professionnalisme.
Dossiers :
Morph.ZIP  738 kb
 
Nikolai Semko:
De tels commentaires dans un fil où les capacités de kanvas sont démontrées, personnellement, à tout le moins, seraient perçus par moi comme une manifestation de manque de professionnalisme.

LOL

En tant que profane, je ne peux que confirmer que c'est très beau, mais je ne sais pas où appliquer tout cela. Rejoignons le club de Peter Konov.

 
Nikolai Semko:

Démonstration d'un simple morphing d'image bmp raster.

Veuillez ne pas écrire de commentaires du type : en quoi cela affecte-t-il le commerce ? en quoi cela peut-il être utile ? etc.
Ce genre de commentaires dans une branche qui démontre les capacités de Kanvas, personnellement, je le perçois au minimum comme une manifestation de manque de professionnalisme.

Non, ce n'est pas un morphing. C'est un peu exagéré d'appeler ça un morphing :


En général, j'étais trop paresseux pour en faire un vrai moi-même - j'ai trouvé des exemples dans les dossiers.

 
Artyom Trishkin:

Non, ce n'est pas un morphing. C'est un peu exagéré d'appeler ça un morphing :


En fait, j'étais trop paresseux pour en faire un vrai moi-même - je l'ai trouvé dans les dossiers d'exemples.

Où est le morphing ici ? Bien sûr, dans ce cas, ce n'est pas crucial pour nos objectifs, mais quand même. Définition wiki du morphing :

Lemorphingest une technologie d'animation par ordinateur, un effet visuel qui crée l'impression d'une transformation en douceur d'un objet en un autre.

Pourtant, le premier exemple correspond davantage à cet effet, selon moi.

 
Andrei Novichkov:

Où est le morphing ici ? Bien sûr, ce n'est pas crucial pour nos objectifs ici, mais quand même. Définition wiki du morphing :

Lemorphingest une technologie d'animation par ordinateur, un effet visuel qui crée l'impression d'une transformation en douceur d'un objet en un autre.

Le premier exemple est plus proche de cet effet, à mon avis.

Où se trouve le premier exemple d'une transformation lisse ? Dans la seconde, tout est transformé de manière totalement fluide dans chaque image d'une forme à une autre (morphing). Et dans le premier, c'est juste un changement d'images avec un fondu et un flou. Je voulais faire une transformation faciale d'un humain en une sorte de bête, mais je ne voulais pas perdre mon temps. Moi qui travaillais à la télévision et qui réalisais des publicités dans 3D Studio MAX, je ne devrais pas connaître le morphing :)

 

Et je sais travailler dans Max aussi )))) Et pas seulement en elle ;) Et j'ai aussi travaillé avec la télévision. L'un des documentaires pour lequel j'ai réalisé un écran d'accueil a remporté un prix il n'y a pas longtemps).

Bien sûr, il serait naïf de considérer le premier exemple comme un morphing au sens plein du terme. Mais Artem, froisser la jupe d'une fille n'est pas exactement la même chose. Pas de pré-morphose) Si seulement sa jupe se transformait en éléphant, ce serait différent )))))).

 
Andrei Novichkov:

Et je sais travailler dans Max aussi )))) Et pas seulement en elle ;) Et j'ai aussi travaillé avec la télévision. L'un des documentaires pour lesquels j'ai écrit un scénario a remporté un prix il n'y a pas si longtemps)).

Bien sûr, il serait naïf de considérer le premier exemple comme un morphing au sens plein du terme. Mais Artem, froisser la jupe d'une fille n'est pas exactement la même chose. Pas de pré-morphose) Si seulement sa jupe se transformait en mmmmm un éléphant, ce serait une autre affaire )))))).

:)

C'est ce que j'ai dit, c'est un peu exagéré. Mais je ne parlais pas de la jupe, où l'ondulation est probablement déjà pré-calculée (je n'ai pas regardé), mais du mannequin lui-même - vous pouvez le faire bouger de différentes manières, y compris avec le modificateur "Morphing", qui serait juste un morphing. Mais ils déplacent probablement le bipède - je ne sais pas, je n'ai pas regardé.

 
Artyom Trishkin:

:)

C'est ce que j'ai dit, c'est un peu exagéré. Mais je ne parlais pas de la jupe, où l'oscillation est probablement déjà pré-calculée (je ne regardais pas), mais du mannequin lui-même - vous pouvez le faire bouger de différentes manières, y compris avec le modificateur "Morphing", qui serait juste un morphing. Mais ils déplacent probablement le bipède - je ne sais pas, je n'ai pas regardé.

Je ne pense pas du tout que ce soit Max. Comment est ce logiciel de modélisation de vêtements ?

Les mouvements du modèle sont bons, la façon dont elle marche. Peut-être que c'est juste une fille couverte de capteurs. Mais les mouvements des bras, il me semble, pas fini et il s'est avéré comme si le culturiste va pousser un mobile))).

Le modèle lui-même pourrait être un peu plus beau. C'est une sorte de cannibale de "L'appel de Cthulhu".

Clair et net )))). On devrait peut-être conclure.