キャンバスがカッコいい! - ページ 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;
     }
  }
//+------------------------------------------------------------------+
取引にどう影響するのか、どう役に立つのか、などのコメントはご遠慮ください。
このようなコメントは、Kanvasの能力を示す支店で、私個人は、少なくとも、非プロフェッショナリズムの現れとして受け取られるでしょう。
ファイル:
Morph.ZIP  738 kb
 
Nikolai Semko:
少なくとも、kanvasの能力を発揮するスレッドでこのような発言をすることは、プロ意識の欠如の現れと個人的には受け取られます。

素人の私は、「いい感じ」としか確認できないのですが、どこをどう塗ればいいのかわからないんですよね。ピーター・ コノフ さんのクラブに入りましょう。

 
Nikolai Semko:

簡単なbmpラスター画像のモーフィングのデモです。

取引にどう影響するのか、どう役に立つのか、などのコメントは書かないでください。
Kanvasの実力を発揮する支店でこのような発言は、少なくとも私個人は、プロ意識の欠如の現れと受け止めるでしょう。

いいえ、それはモーフィングではありません。モーフィングと呼ぶには無理があります。


一般に、自分で実物を作るのは億劫で、フォルダーにあるサンプルを見ていました。

 
Artyom Trishkin:

いいえ、それはモーフィングではありません。モーフィングと呼ぶには無理がありますね。


実は、自分で実物を作るのが面倒で、例のフォルダの中にあったんです。

モーフィングはどうした?もちろん、この場合、私たちの目的にとって決定的なものではありませんが、それでもです。モーフィングのWiki的定義。

モーフィングとはコンピュータ・アニメーションにおける 技術の一つで、ある物体が別の物体に滑らかに変化するような印象を与える視覚効果のことである。

それでも、最初の例の方が、この効果に近いとイミフです。

 
Andrei Novichkov:

モーフィングはどうした?もちろん、ここでの目的にとって決定的なものではありませんが、それでもです。モーフィングのWiki的定義。

モーフィングとはコンピュータ・アニメーションにおける 技術の一つで、ある物体が別の物体に滑らかに変化するような印象を与える視覚効果のことである。

最初の例の方が、この効果に近いとイミフです。

滑らかな変換の 最初の例はどこですか?2つ目は、すべてがある形から別の形に、各フレームで完全に滑らかに変換される(モーフィング)ものです。しかも、1枚目では色あせや腫れを伴うイメージチェンジに過ぎない。人間から獣のような顔に変身することもやりたかったのですが、時間がもったいないのでやめました。元々テレビの仕事をしていて、3D Studio MAXでCMを作っていた私が、モーフィングを知らないはずはないのですが......(笑)。

 

そして、私はMaxでの作業方法も知っています ))))。そして、その中だけでなく ))そして、テレビとも仕事をしたことがあります。私がスプラッシュスクリーンを担当したドキュメンタリーのひとつが、少し前に賞を受賞したんですよ)。

もちろん、最初の例を完全な意味でのモーフィングと考えるのは甘いだろう。でも、アルテム、女の子のスカートをめくるのは、ちょっと違うよ。変身前ではありません)スカートが象になれば別ですが )))))))

 
Andrei Novichkov:

そして、私はMaxでの作業方法も知っています ))))。そして、その中だけでなく ))そして、テレビとも仕事をしたことがあります。私が脚本を担当したドキュメンタリーが少し前に賞を受賞しました))

もちろん、最初の例を完全な意味でのモーフィングと考えるのは甘いだろう。でも、アルテム、女の子のスカートをめくるのは、ちょっと違うよ。変身前ではありません)スカートがうーん象に変身してくれれば、それはそれで別問題なのですが )))))。

:)

それこそ、ちょっと無理があるんじゃないかと。しかし、私が言っているのはスカートのことではなく、おそらく波紋はすでに計算済みで(見ていなかった)、ダミーそのものについてです。"Morphing "モディファイアを含めて、さまざまな動きをさせることができますが、それは単にモーフィングでしょう。でも、おそらく二足歩行を動かしているのでしょう......見てないので分かりませんが。

 
Artyom Trishkin:

:)

それこそ、ちょっと無理があるんじゃないかと。しかし、私が言ったのはスカートのことではなく、おそらくぐらつきはすでに計算済みで(見ていなかった)、ダミーそのものについてです。"Morphing "モディファイアを含めて、さまざまな動きをさせることができますが、それは単にモーフィングでしょう。でも、おそらく二足歩行を動かしているのでしょう......見てないので分かりませんが。

全然マックスじゃないと思うんですけどね。服のモデリングソフトはどうですか?

モデルの動き、歩き方がいいんです。センサーに覆われた少女なのかもしれない。しかし、腕の動きが、まだ完成されていないようで、まるでボディビルダーがモビールを押しに行くような感じになってしまいました))。

モデル自体はもう少し見栄えを良くした方が良いと思います。これは「クトゥルフの呼び声」に出てくる人食い人種の一種だ。

大きな声ではっきりと )))))。そろそろ終わりにしましょうか。

理由: