A lona é legal! - página 10

 
Реter Konow:

Obrigado, Nicholas. Não vou esquecer seu sacrifício! :)

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

Demonstração de uma simples morphing de imagem 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;
     }
  }
//+------------------------------------------------------------------+
Por favor, não escreva comentários como: como isso afeta o comércio? Como pode ser útil? etc.
Tais comentários no ramo, que demonstram as capacidades de Kanvas, eu pessoalmente, pelo menos, serei percebido como uma manifestação de falta de profissionalismo.
Arquivos anexados:
Morph.ZIP  738 kb
 
Nikolai Semko:
Tais comentários em um fio onde as capacidades de kanvas são demonstradas, pessoalmente, no mínimo, seriam percebidos por mim como uma manifestação de falta de profissionalismo.

LOL

Eu, como um leigo, só posso confirmar que parece ótimo, mas não sei onde aplicar tudo isso. Vamos nos juntar ao clube de Peter Konov.

 
Nikolai Semko:

Demonstração de uma simples morphing de imagem bmp raster.

Por favor, não escreva comentários como: como isso afeta o comércio? como pode ser útil? etc.
Este tipo de comentários em um ramo que demonstra as capacidades de Kanvas, eu pessoalmente, no mínimo, serei percebido como uma manifestação de falta de profissionalismo.

Não, isso não é morphing. O morphing é um estiramento para chamá-lo de morphing:


Em geral, eu era preguiçoso demais para fazer um de verdade - encontrei exemplos nas pastas.

 
Artyom Trishkin:

Não, isso não é morphing. É um estiramento para chamá-lo de "morphing":


Na verdade, eu mesmo era preguiçoso demais para fazer um de verdade - eu o encontrei nas pastas de exemplo.

Onde está o morphing aqui? É claro que, neste caso, não é crucial para nossos propósitos, mas ainda assim. Definição Wiki de morphing:

Morphingé uma tecnologia em animação computadorizada, um efeito visual que cria a impressão de uma transformação suave de um objeto em outro.

Ainda assim, o primeiro exemplo é mais parecido com este efeito, imho.

 
Andrei Novichkov:

Onde está o morphing aqui? Claro, não é crucial para nossos propósitos aqui, mas ainda assim. Definição Wiki de morphing:

Morphingé uma tecnologia em animação computadorizada, um efeito visual que cria a impressão de transformação suave de um objeto em outro.

O primeiro exemplo é mais semelhante a este efeito, imho.

Onde, no primeiro exemplo de uma transformação suave? Na segunda, tudo se transforma completamente sem problemas em cada moldura de uma forma para outra (morphing). E na primeira, é apenas uma mudança de imagens com desbotamento e embaçamento. Eu queria fazer a transformação do rosto humano em algum tipo de fera, mas não queria perder meu tempo. Eu, que costumava trabalhar na TV, e fazer comerciais no 3D Studio MAX, não deveria saber de morphing :)

 

E também sei como trabalhar em Max )))) E não apenas nele )) E também já trabalhei com televisão. Um dos documentários pelos quais fiz um splash screen para ganhar um prêmio não faz muito tempo ).

Naturalmente, seria ingênuo considerar o primeiro exemplo como morphing no sentido pleno da palavra. Mas Artem, desabotoar a saia de uma garota não é exatamente a mesma coisa. Não pré-morfo ) Se ao menos sua saia se transformasse em elefante, isso seria diferente )))))).

 
Andrei Novichkov:

E também sei como trabalhar em Max )))) E não apenas nele )) E também já trabalhei com televisão. Um dos documentários pelos quais fiz um roteiro para ganhar um prêmio não há muito tempo))

Naturalmente, seria ingênuo considerar o primeiro exemplo como morphing no sentido pleno da palavra. Mas Artem, desabotoar a saia de uma garota não é exatamente a mesma coisa. Não pré-morphing ) Se ao menos sua saia se transformasse em mmmmm um elefante, isso seria outra questão )))))).

:)

Isso foi o que eu disse, um pouco de estiramento. Mas eu não estava falando da saia, onde a ondulação provavelmente já está pré-calculada (eu não estava olhando), mas do boneco em si - você pode fazer com que ele se mova de maneiras diferentes, inclusive com o modificador "Morphing", que seria apenas morphing. Mas eles provavelmente movem o bípede - não sei, eu não olhei.

 
Artyom Trishkin:

:)

Isso foi o que eu disse, um pouco de estiramento. Mas eu não estava falando da saia, onde a oscilação provavelmente já está pré-calculada (eu não estava olhando), mas do boneco em si - você pode fazer com que ele se mova de maneiras diferentes, inclusive com o modificador "Morphing", que seria apenas morphing. Mas eles provavelmente movem o bípede - não sei, eu não olhei.

Acho que não é de modo algum Max. Como é esse software de modelagem de roupas?

Os movimentos do modelo são bons, a maneira como ela anda. Talvez seja apenas uma garota coberta de sensores. Mas os movimentos de braços, parece-me, não terminaram e acabou como se o fisiculturista fosse empurrar um móvel))).

O modelo em si poderia ter uma aparência um pouco melhor. Ele é um canibal do "Call of Cthulhu".

Em alto e bom som )))). Talvez devêssemos embrulhá-lo.

Razão: