Tuval harika! - sayfa 24

 
Rafil Nurmukhametov :

@Nikolai Semko merhaba, söyle bana, lütfen, metnin üzerine bindirilmiş bir nesnenin saydamlığını tek bir tuval katmanında yapmak mümkün müdür, resme bakın? İkinci şeffaf daire ikinci katman, bu nesneyi şeffaf yapmak benim için sorun değil.

Ve bir soru daha, tuvaldeki bir katmana nasıl resim eklenir yoksa onu ek bir katmana mı koymam gerekir? Bir şekilde kaynak aracılığıyla anlıyorum, ancak benim için bir şey yolunda gitmiyor, bir kod örneği gösterebilir misiniz?

Saydamlıklı (COLOR_FORMAT_ARGB_NORMALIZE) bir kanvas kullanılıyorsa, tr1 ve tr2 katmanlarının saydamları formüle göre karıştırılmalıdır.

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

Rastgele renk ve rastgele şeffaflık içeren rastgele daireler içeren örnek bir komut dosyası:


 #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;
  }
//+------------------------------------------------------------------+
Dosyalar:
 
Rafil Nurmukhametov :

@Nikolai Semko

Ve bir soru daha, tuvaldeki bir katmana nasıl resim eklenir yoksa onu ek bir katmana mı koymam gerekir? Bir şekilde kaynak aracılığıyla anlıyorum, ancak benim için bir şey yolunda gitmiyor, bir kod örneği gösterebilir misiniz?

resimlerle çalışma burada gözetlenebilir.
Sonunda, resim aynı noktalar dizisidir.
Bu örnek, iki bmp dosyasının kaynaklarının uint BMP1[], BMP2[] dizilerine nasıl sürüleceğini ve ardından bu dizilerle tek bir tuvalde nasıl çalışılacağını gösterir.

 
Çok teşekkür ederim Nikolay, sonunda anladım
 
Rafil Nurmukhametov :
Çok teşekkür ederim Nikolay, sonunda anladım

Benim için zevkti.

 

Dinamik zaman çerçevesi ile ilk deneyler.

EURUSD'nin tüm geçmişini dinamik olarak eşleştirin:

.

Fraktalite oradadır.
 
Nikolai Semko :

Dinamik zaman çerçevesi ile ilk deneyler.

EURUSD'nin tüm geçmişini dinamik olarak eşleştirin:

.

Fraktalite oradadır.
İngilizce yazınızı gördüm.
Lütfen - İngilizce CodeBase de dahil olmak üzere İngilizce bölümünde daha fazlasını gönderin (orada her şeyiniz çok popüler).
Bilgi için.
 
Sergey Golubev :
İngilizce yazınızı gördüm.
Lütfen - İngilizce CodeBase de dahil olmak üzere İngilizce bölümünde daha fazlasını gönderin (orada her şeyiniz çok popüler).
Bilgi için.
Teşekkür ederim. Deneyecek.
Doğru, bana forumun İngilizce konuşulan bölümünde gönderilerime verilen tepkinin sıfıra yakın olduğu görülüyordu. Her zaman "sessizce kendiyle ..." hissi
 
Nikolai Semko :

Dinamik zaman çerçevesi ile ilk deneyler.

EURUSD'nin tüm geçmişini dinamik olarak eşleştirin:

.

Fraktalite vardır.
Güzel bitti!
 
Süper!
 
Nikolai Semko :

Dinamik zaman çerçevesi ile ilk deneyler.

EURUSD'nin tüm geçmişini dinamik olarak eşleştirin:

.

Fraktalite oradadır.

Çok net ve ilginç.

Tiki hayal edilebilir mi?