El lienzo es genial. - página 10

 
Реter Konow:

Gracias, Nicholas. ¡No olvidaré tu sacrificio! :)

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

Demostración de un sencillo morphing de una imagen rasterizada 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;
     }
  }
//+------------------------------------------------------------------+
Por favor, no escriba comentarios como: ¿cómo afecta al comercio? ¿cómo puede ser útil? etc.
Tales comentarios en la rama, lo que demuestra las capacidades de Kanvas, yo personalmente, al menos, será percibido como una manifestación de la falta de profesionalidad.
Archivos adjuntos:
Morph.ZIP  738 kb
 
Nikolai Semko:
Tales comentarios en un hilo donde se demuestran las capacidades de kanvas, personalmente, como mínimo, serían percibidos por mí como una manifestación de falta de profesionalidad.

LOL

Yo, como lego en la materia, sólo puedo confirmar que se ve muy bien, pero no sé dónde aplicarlo todo. Unámonos al club de Peter Konov.

 
Nikolai Semko:

Demostración de un sencillo morphing de una imagen rasterizada bmp.

Por favor, no escribas comentarios como: ¿cómo afecta esto al comercio? ¿cómo puede ser útil? etc.
Este tipo de comentarios en una rama que demuestra las capacidades de Kanvas, yo personalmente, como mínimo, será percibido como una manifestación de falta de profesionalidad.

No, eso no es morphing. Llamarlo "morphing" es una exageración:


En general, me daba demasiada pereza hacer uno de verdad yo mismo: encontré ejemplos en las carpetas.

 
Artyom Trishkin:

No, eso no es morphing. Es una exageración llamarlo morphing:


En realidad, me daba pereza hacer uno de verdad yo mismo; lo encontré en las carpetas de ejemplos.

¿Dónde está el morphing aquí? Por supuesto, en este caso no es crucial para nuestros propósitos, pero aún así. Definición de morphing en la Wiki:

El morphinges una tecnología de animación por ordenador, un efecto visual que crea la impresión de una transformación suave de un objeto en otro.

Aun así, el primer ejemplo se parece más a este efecto, en mi opinión.

 
Andrei Novichkov:

¿Dónde está el morphing aquí? Por supuesto, no es crucial para nuestros propósitos aquí, pero aún así. Definición de morphing en la Wiki:

El morphinges una tecnología de animación por ordenador, un efecto visual que crea la impresión de transformación suave de un objeto en otro.

El primer ejemplo es más parecido a este efecto, en mi opinión.

¿Dónde en el primer ejemplo de una transformación suave? En la segunda, todo se transforma de forma completamente suave en cada fotograma de una forma a otra (morphing). Y en la primera, es sólo un cambio de imagen con desvanecimiento e hinchazón. Quería hacer la transformación de la cara de humano en una especie de bestia, pero no quería perder el tiempo. Yo, que solía trabajar en la televisión, y hacer anuncios en 3D Studio MAX, no debe saber acerca de morphing :)

 

Y también sé cómo trabajar en Max )))) Y no sólo en él )) Y también he trabajado con la televisión. Uno de los documentales para los que hice una pantalla de inicio ganó un premio no hace mucho tiempo).

Por supuesto, sería ingenuo considerar el primer ejemplo como morphing en el pleno sentido de la palabra. Pero Artem, erizar la falda de una chica no es exactamente lo mismo. No pre-morphing ) Si sólo su falda se convirtiera en un elefante, sería diferente )))))).

 
Andrei Novichkov:

Y también sé cómo trabajar en Max )))) Y no sólo en él )) Y también he trabajado con la televisión. Uno de los documentales para los que hice un guión ganó un premio no hace mucho))

Por supuesto, sería ingenuo considerar el primer ejemplo como morphing en el pleno sentido de la palabra. Pero Artem, erizar la falda de una chica no es exactamente lo mismo. No pre-morphing ) Si sólo su falda se convirtiera en mmmmm un elefante, eso sería otro asunto )))))).

:)

Eso es lo que he dicho, un poco exagerado. Pero no me refería a la falda, donde probablemente la ondulación ya está precalculada (no estaba mirando), sino al maniquí en sí: puedes hacer que se mueva de diferentes maneras, incluso con el modificador "Morphing", que sería simplemente morphing. Pero probablemente muevan el bípedo - no lo sé, no he mirado.

 
Artyom Trishkin:

:)

Eso es lo que he dicho, un poco exagerado. Pero no me refería a la falda, donde probablemente el bamboleo ya esté precalculado (no estaba mirando), sino al muñeco en sí: puedes hacer que se mueva de diferentes maneras, incluso con el modificador "Morphing", que sería simplemente morphing. Pero probablemente muevan el bípedo - no lo sé, no he mirado.

No creo que sea Max en absoluto. ¿Qué tal es ese software de modelado de ropa?

Los movimientos de la modelo son buenos, la forma en que camina. Tal vez sea una chica cubierta de sensores. Pero los movimientos de los brazos, me parece, no terminó y resultó como si el culturista va a empujar fuera de un móvil)).

El modelo en sí podría ser un poco más bonito. Es una especie de caníbal de "La llamada de Cthulhu".

Alto y claro )))). Probablemente deberíamos terminar con esto.