캔버스 멋지다! - 페이지 10

 
Реter Konow :

니콜라이 감사합니다. 당신의 희생을 잊지 않겠습니다! :)

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

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;
     }
  }
//+------------------------------------------------------------------+
큰 요청은 다음과 같은 의견을 작성하지 않는 것입니다. 이것이 거래에 어떤 영향을 미칩니까? 이것이 어떻게 유용할 수 있습니까? 등.
캔버스의 가능성을 보여주는 스레드에서 이러한 댓글은 개인적으로 최소한 비전문성의 표현으로 인식될 것입니다.
파일:
Morph.ZIP  738 kb
 
Nikolai Semko :
캔버스의 가능성을 보여주는 스레드에서 이러한 댓글은 개인적으로 최소한 비전문성의 표현으로 인식될 것입니다.

ㅋㅋㅋ

나는 평신도로서 확인할 수 있습니다. 훌륭해 보입니다. 그러나이 모든 것을 어디에 적용해야하는지 이해하지 못합니다. Peter 'a Konov ' 클럽에 가입하세요.

 
Nikolai Semko :

bmp 비트맵의 간단한 모핑 시연.

큰 요청은 다음과 같은 의견을 작성하지 않는 것입니다. 이것이 거래에 어떤 영향을 미칩니까? 이것이 어떻게 유용할 수 있습니까? 등.
캔버스의 가능성을 보여주는 스레드에서 이러한 댓글은 개인적으로 최소한 비전문성의 표현으로 인식될 것입니다.

아니요, 이것은 모핑이 아닙니다. 스트레칭으로 모핑이라고 부를 수 있습니다.


일반적으로 실제를 직접 만들기에는 너무 게으르며 예제 폴더에서 찾았습니다.

 
Artyom Trishkin :

아니요, 이것은 모핑이 아닙니다. 스트레칭으로 모핑이라고 부를 수 있습니다.


일반적으로 실제를 직접 만들기에는 너무 게으르며 예제 폴더에서 찾았습니다.

그런데 여기, 모핑은 어디에 있습니까? 물론 이 경우에는 우리 작업에 필수적인 것은 아니지만 여전히 그렇습니다. 위키의 모프 정의:

Morphing ( 영어 모핑 , 변형)은 컴퓨터 애니메이션 의 기술로, 한 개체가 다른 개체로 부드럽게 변형되는 느낌을 주는 시각 효과입니다.

어쨌든 첫 번째 예는 이 효과인 IMHO와 더 유사합니다.

 
Andrei Novichkov :

그런데 여기, 모핑은 어디에 있습니까? 물론 이 경우에는 우리 작업에 필수적인 것은 아니지만 여전히 그렇습니다. 위키의 모프 정의:

Morphing ( 영어 모핑 , 변형)은 컴퓨터 애니메이션 의 기술로, 한 개체가 다른 개체로 부드럽게 변형되는 느낌을 주는 시각 효과입니다.

어쨌든 첫 번째 예는 이 효과인 IMHO와 더 유사합니다.

첫 번째 예에서 부드러운 변환 은 어디에 있습니까? 두 번째에서는 각 프레임에서 모든 것이 한 형태에서 다른 형태로 완전히 부드럽게 변환됩니다(모핑). 그리고 첫 번째는 감쇠와 유입이 있는 이미지의 변화일 뿐입니다. 나는 사람의 얼굴을 어떤 동물로 변형하고 싶었지만 시간을 낭비하지 않았습니다. 예전에 3D Studio MAX로 TV 광고도 하고 광고도 했던 저라면 모핑 얘기는 하지 말아야겠네요 :)

 

그리고 나는 Max에서 일하는 방법도 알고 있습니다)))) 뿐만 아니라))) 그리고 텔레비전에서도 일했습니다. 문서 중 하나입니다. 얼마 전에 스크린 세이버를 만든 영화가 상을 받았습니다)

물론, 첫 번째 예를 단어의 완전한 의미에서 모핑하는 것으로 간주하는 것은 순진할 것입니다. 하지만 Artyom, 역시 소녀의 치마가 흔들리는 것도 옳지 않다. 모핑까지 아님) 이제, 그녀의 치마가 mmmmm을 코끼리로 바꾸면 그것은 또 다른 문제입니다))))))

 
Andrei Novichkov :

그리고 나는 Max에서 일하는 방법도 알고 있습니다)))) 뿐만 아니라))) 그리고 텔레비전에서도 일했습니다. 문서 중 하나입니다. 얼마 전에 스크린 세이버를 만든 영화가 상을 받았습니다)

물론, 첫 번째 예를 단어의 완전한 의미에서 모핑하는 것으로 간주하는 것은 순진할 것입니다. 하지만 Artyom, 역시 소녀의 치마가 흔들리는 것도 옳지 않다. 모핑까지 아님) 이제, 그녀의 치마가 mmmmm을 코끼리로 바꾸면 그것은 또 다른 문제입니다))))))

:)

그것이 내가 말한 것입니다. "스트레칭으로." 하지만 스커트에 대한 것이 아니라, 이미 미리 스윙이 계산되었을 것입니다(무엇을 보지 않았는가)가 아니라 블랭크 자체에 대한 것입니다. 결국 "Morphing" 수식어를 포함하여 다양한 방식으로 움직임이 수행될 수 있습니다. , 정확히 모핑됩니다. 그러나 그들은 아마도 바이페드를 그곳으로 움직일 것입니다. 그는 보지 않았음을 알고 있습니다.

 
Artyom Trishkin :

:)

그것이 내가 말한 것입니다. "스트레칭으로." 하지만 스커트에 대한 것이 아니라, 이미 미리 스윙이 계산되었을 것입니다(무엇을 보지 않았는가)가 아니라 블랭크 자체에 대한 것입니다. 결국 "Morphing" 수식어를 포함하여 다양한 방식으로 움직임이 수행될 수 있습니다. , 정확히 모핑됩니다. 그러나 그들은 아마도 바이페드를 그곳으로 움직일 것입니다. 그는 보지 않았음을 알고 있습니다.

맥스는 아닌거 같네요. 의상 모델링 프로그램은 어떤가요?

모델의 움직임은 그녀가 걷는 방식으로 잘 수행됩니다. 아마도 그 소녀는 센서로 덮여 있었을 것입니다. 그러나 손의 움직임은 나에게 마무리되지 않은 것으로 보이며 마치 보디 빌더가 휴대 전화를 누르는 것처럼 나타났습니다))

글쎄요, 모델 자체가 더 예뻐질 수 있습니다. 크툴루의 부름에 나오는 식인종 같습니다.

심장에서 Nafludili))))). 아마도 마무리할 가치가 있을 것입니다.