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

 
fxsaber :

CCanvas - ResourceCreate 래퍼. 따라서 예를 들어 이미 배열 형태로 20개의 기성품 사진이 있습니다. 캔버스를 통해 변경하려면 값비싼 ArrayCopy+Update를 지속적으로 수행해야 합니다.

그리고 CCanvas 없이 이 작업을 수행하면 모든 것이 ResourceCreate+ChartRerdraw로만 생성됩니다. 코드베이스에 다이나믹 드로잉으로 여러 작품을 업로드했습니다. CCanvas가 좋지 않다는 것이 분명했습니다.

리소스 래퍼에 동의합니다. 정의를 정의해야 합니다. 내가 이해하는 캔버스(캔버스) 는 CCanvas 클래스 가 아니라 직사각형 그래픽 리소스입니다. 포인트 배열. CCanvas 클래스에서 생성, 업데이트 및 삭제를 위한 몇 가지 함수가 필요합니다. 그것에서 이것은 상당히 유능하게 구현되었으며 나머지 기능은 픽셀 (평활화되지 않은) 구현으로 인해 나에게 쓸모없는 것처럼 보입니다. 나는 또한 래스터 그래픽이 아닌 벡터 그래픽으로서의 캔버스에 관심이 있습니다. 즉, 사진을 업로드하는 것이 아니라 내가 직접 이미지를 형성할 때입니다. 따라서 20개의 기성 이미지가 있는 옵션에 대한 실용적인 응용 프로그램이 보이지 않으며 MT5에서 비디오 플레이어를 만들 수 없습니다. 벡터 그래픽의 작업은 30밀리초 미만(바람직하게는 10밀리초) 이내에 이미지를 그리는 것입니다. 왜냐하면 인간의 눈은 여전히 초당 30번 이상 변화하는 그림을 볼 수 없습니다. 기본적으로 MT5의 캔버스는 이 작업을 잘 수행합니다. 사실, 이러한 색상 소용돌이는 기능의 한계에 있지만(즉, 평균 랩톱에서 한 프레임이 약 30밀리초 내에 형성됨) MT4에서는 이미 속도가 느려집니다.

이제 여유가 생기는 대로 CCanvasPro 클래스를 만들고 있는데, 이 클래스에서 모든 것을 조금 더 좋게 만들고 싶습니다.
다음은 지금까지 원으로 얻은 것입니다(그림자로 부드럽게). 죄송합니다. 아직 코드를 열지 않았습니다. 습기 때문입니다.

이것도 스크립트입니다.

파일:
 
Evgeniy Zhdan :
멋진 무지개 차트! 다른 하나는 음악에 맞춰 양초를 춤추게 하고 서로 회전하게 하는 것입니다!

수익이 증가할까요?) 춤을 출 때마다 보너스가 필요합니다.))))

 
Nikolai Semko :

물론 도움이 될 것이지만 끔찍한 브레이크가 있을 것입니다.

약간의 감속이 있지만 끔찍한 브레이크는 없습니다. 적어도 시각적으로 변경된 것은 없습니다.


 
Rashid Umarov :

약간의 감속이 있지만 끔찍한 브레이크는 없습니다. 적어도 시각적으로 변경된 것은 없습니다.


글쎄, 끝났어. 소름 끼치는 것들에 대해, 나는 흥분했다. 그러나 여전히 - 전체 성능보다 약 10% 느립니다.

 
Rashid Umarov :

약간의 감속이 있지만 끔찍한 브레이크는 없습니다. 적어도 시각적으로 변경된 것은 없습니다.


프로파일링이 아닌 GetMicrosecondCount 를 통해 확인됨

1000 프레임에서 3-4%의 속도 저하가 나타났습니다. 원칙적으로 예, 그다지 중요하지 않습니다.

 while (! IsStopped ())
     {
       static ulong t0= GetMicrosecondCount ();
       int pos= int (i%size);
       if (pos== 0 )
        {
         C.Update();
         //Sleep(30);
         X1= Width-( sin (( double )j/ 100 )*( double )Width);
         Y1= Height-( cos (( double )j/ 140 )*( double )Height);
         X2= Width+( cos (( double )j/ 80 )*( double )Width);
         Y2= Height+( sin (( double )j/ 20 )*( double )Height);
         if (j== 101000 ) Print ( GetMicrosecondCount ()-t0);
         j++;
        }
       int X=pos%Width;
       int Y= int (pos/Width);
       double d= ((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y))/(((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y))+((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y)));
       //C.m_pixels[pos]=XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]);
      C.PixelSet(X,Y,XRGB(h[ int (d* 11520 )],h[ int (d* 17920 )],h[ int (d* 6400 )]));
      i++;
     }


 
Nikolai Semko :

CCanvas 클래스를 통해 짧은 코드를 사용하여 사용자 지정 그래픽의 기능을 효과적으로 시연하는 작업을 스스로 설정했습니다.

그것이 그것에서 나온 것입니다.

이 스크립트는 MQL5와 MQL4에서 모두 작동합니다. MT5에서만 훨씬 빠릅니다.

각 프레임은 고유하고 반복되지 않습니다. 즉, 스크립트는 순환하지 않습니다.


컴파일하기 전에 m_pixels[] 배열을 protected:에서 Canvas.mqh 파일의 public으로 전송해야 합니다.

나는 30 분 동안 지켜 보았고, 이것이 이륙하기를 기다렸다))

 
Alexey Volchanskiy :

나는 30 분 동안 지켜 보았고, 이것이 이륙하기를 기다렸다))

:))
 

솔직히 말해서, 나는 요점이 무엇인지 이해하지 못합니다.

글쎄요, 그것은 아름답고, 다채롭고, 무지개빛입니다... 하지만 그것이 Expert Advisor의 작업에 어떤 영향을 미칠까요?

나는 우리가 여기에 게임을 쓴다면 이해할 것입니다 - 그런 기회가 있습니다. 오, 그것이 얼마나 수요가 많을지 ... 그리고 ...

제 생각에는 결과 코드가 시스템을 가능한 한 적게 로드하도록 불필요한 작업을 제거하는 것이 필요합니다(클라우드에 돈이 필요함). 예, 더 쉽게 할 수 있도록 지원합니다.

구매자에게 "와우 효과"가 아닌 한... 아름답게 디자인된 출력을 통해 프리랜스에서 더 많은 반죽을자를 수 있다는 것이 사실이라고 생각합니다 ...

 
아주 좋습니다. 감사합니다. 이제 거래는 문자 그대로의 의미에서 훨씬 더 장밋빛이 될 것입니다.
 
George Merts :

솔직히 말해서, 나는 요점이 무엇인지 이해하지 못합니다.

글쎄요, 그것은 아름답고, 다채롭고, 장밋빛입니다... 하지만 그것이 Expert Advisor의 작업에 어떤 영향을 미칠까요?

나는 우리가 여기에 게임을 쓴다면 이해할 것입니다 - 그런 기회가 있습니다. 오, 그것이 얼마나 수요가 많을지 ... 그리고 ...

제 생각에는 결과 코드가 시스템을 가능한 한 적게 로드하도록 불필요한 작업을 제거하는 것이 필요합니다(클라우드에 돈이 필요함). 예, 더 쉽게 할 수 있도록 지원합니다.

구매자에게 "와우 효과"가 아닌 한... 아름답게 디자인된 출력을 통해 프리랜스에서 더 많은 반죽을자를 수 있다는 것이 사실이라고 생각합니다 ...

지표에 유용합니다. 여기 캔버스에 다양한 화살표 표시기 를 그렸고, 기사도 있었습니다.

사유: