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

 
Rafil Nurmukhametov :

@Nikolai Semko 안녕하세요, 하나의 캔버스 레이어에서 텍스트 위에 겹쳐진 개체의 투명도를 만드는 것이 가능한가요? 그림이 보이나요? 두 번째 투명 원이 두 번째 레이어이므로 이 개체를 투명하게 만드는 것은 문제가 되지 않습니다.

그리고 한 가지 더 질문입니다. 캔버스의 레이어에 이미지를 삽입하는 방법이나 추가 레이어에 넣어야 하나요? 어떻게든 리소스를 통해 이해하지만 뭔가 잘 되지 않습니다. 코드 예제를 보여줄 수 있습니까?

투명도가 있는 캔버스(COLOR_FORMAT_ARGB_NORMALIZE)를 사용하는 경우 두 레이어 tr1 및 tr2의 투명도를 공식에 따라 혼합해야 합니다.

 double tr=tr1+tr2-tr1*tr2; // где tr, tr1, tr1 меняются от нуля (абсолютная прозрачность) до 1(абсолютная непрозрачность) 

임의 색상 및 임의 투명도의 임의 원이 있는 예제 스크립트:


 #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164
#define Num 100
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
// инициализация случайных окружностей
   uint X[Num],Y[Num],sr[Num],clr[Num],Rmin[Num],Rmax[Num];
   double sx[Num],sy[Num];
   for ( int i= 0 ; i<Num; i++)
     {
      X[i]= rand ()% 3141 ;
      Y[i]= rand ()% 3141 ;
      sr[i]= rand ()% 3141 ;
      sx[i]= 0.3 + 0.7 *( double ) rand ()/ 32767.0 ;
      sy[i]= 0.3 + 0.7 *( double ) rand ()/ 32767.0 ;
      clr[i]=ARGB( rand ()% 256 , rand ()% 256 , rand ()% 256 , rand ()% 256 );
       int r2= 5 + rand ()% 100 ;
       int r1= 5 + rand ()% 100 ;
      Rmin[i]=( int ) fmin (r1,r2);
      Rmax[i]=( int ) fmax (r1,r2);
     }
// формирование изображения из Num (= 100) полупрозрачных кругов
   double j= 0 ;
   while (! IsStopped ())
     {
      Canvas.Erase();
      Canvas.CurentFont( "Arial" , 30 );
      Canvas.TextPosY= 100 ;
      Canvas.Comm( "Hello World!" );
       for ( int i= 0 ; i<Num; i++)
        {
         Circle(W.Width/ 2 *( 1 + sin ((X[i]+sx[i]*j)* M_PI / 1000 )),
                W.Height/ 2 *( 1 + sin ((Y[i]+sy[i]*j)* M_PI / 1000 )),
                Rmin[i]+ double (Rmax[i]-Rmin[i])/ 2 *( 1.0 + cos ((j+sr[i])* M_PI / 1000 )),clr[i]);
        }
      Canvas.Update();
      j+= 0.3 ;
       Sleep ( 30 );
     }
  }
//+------------------------------------------------------------------+

void Circle( double x, double y, double r, uint clr) 
  {
   double R2=r*r;
   for ( int X=Round(x-r); X <=Round(x+r);X++)
       for ( int Y=Round(y-r); Y<=Round(y+r);Y++)
         if (((x-X)*(x-X)+(y-Y)*(y-Y))<=R2) Canvas.PixelSet(X,Y,MixColor(clr,Canvas.PixelGet(X,Y)));
  }
//+------------------------------------------------------------------+

uint MixColor( uint clr, uint clrback) // смешиваем цвет и прозрачность clr c цветом и прозрачностью фона clrback
  {
   argb C,Bg;
   if (clrback== 0 ) return clr;
   C.clr=clr;
   if (C.c[ 3 ]== 255 ) return clr;
   Bg.clr=clrback;
   double tr=C.c[ 3 ]/ 255.0 ;
   double trb=Bg.c[ 3 ]/ 255.0 ;

   C.c[ 2 ]= uchar (Bg.c[ 2 ]+tr*(C.c[ 2 ]-Bg.c[ 2 ]));
   C.c[ 1 ]= uchar (Bg.c[ 1 ]+tr*(C.c[ 1 ]-Bg.c[ 1 ]));
   C.c[ 0 ]= uchar (Bg.c[ 0 ]+tr*(C.c[ 0 ]-Bg.c[ 0 ]));

   C.c[ 3 ]= uchar (( trb+tr-trb*tr )* 255.0 + 0.49999 );
   return C.clr;
  }
//+------------------------------------------------------------------+
파일:
 
Rafil Nurmukhametov :

@니콜라이 셈코

그리고 한 가지 더 질문입니다. 캔버스의 레이어에 이미지를 삽입하는 방법이나 추가 레이어에 넣어야 하나요? 어떻게든 리소스를 통해 이해하지만 뭔가 잘 되지 않습니다. 코드 예제를 보여줄 수 있습니까?

사진 작업은 여기에서 엿볼 수 있습니다.
결국 그림은 같은 점의 배열입니다.
이 예는 두 개의 bmp 파일의 리소스를 uint BMP1[], BMP2[] 배열로 구동한 다음 하나의 캔버스에서 이러한 배열로 작업하는 방법을 보여줍니다.

 
Nikolay에게 대단히 감사합니다. 마침내 알아냈습니다.
 
Rafil Nurmukhametov :
Nikolay에게 대단히 감사합니다. 마침내 알아냈습니다.

별말씀을요.

 

동적 시간대를 사용한 첫 번째 실험.

역학에서 EURUSD 전체 역사 쌍 :

.

프랙탈리티가 있습니다.
 
Nikolai Semko :

동적 시간대를 사용한 첫 번째 실험.

역학에서 EURUSD 전체 역사 쌍 :

.

프랙탈리티가 있습니다.
나는 당신의 게시물을 영어로 보았습니다.
영어 코드베이스를 포함하여 영어 부분에 더 많은 것을 게시하십시오(귀하의 모든 것이 그곳에서 매우 유명합니다).
정보를 위해.
 
Sergey Golubev :
나는 당신의 게시물을 영어로 보았습니다.
영어 코드베이스를 포함하여 영어 부분에 더 많은 것을 게시하십시오(귀하의 모든 것이 그곳에서 매우 유명합니다).
정보를 위해.
고맙습니다. 시도 할 것이다.
사실, 포럼의 영어권 부분에서 내 게시물에 대한 반응이 거의 0에 가까웠던 것 같습니다. 항상 "조용히 자신과 함께 ..."
 
Nikolai Semko :

동적 시간대를 사용한 첫 번째 실험.

역학에서 EURUSD 전체 역사 쌍 :

.

프랙탈리티가 있습니다.
멋진 완료!
 
감독자!
 
Nikolai Semko :

동적 시간대를 사용한 첫 번째 실험.

역학에서 EURUSD 전체 역사 쌍 :

.

프랙탈리티가 있습니다.

매우 명확하고 흥미롭습니다.

티키는 상상할 수 있습니까?