Leinwand ist cool! - Seite 24

 
Rafil Nurmukhametov:

Hallo@Nikolai Semko, könnten Sie mir bitte sagen, ob es möglich ist, ein transparentes Objekt über Text in einer Ebene der Leinwand zu machen, siehe das Bild? Der zweite transparente Kreis ist die zweite Ebene, dieses Objekt ist kein Problem für mich, transparent zu machen.

Noch eine Frage: Wie füge ich ein Bild in die Canvas-Ebene ein oder sollte ich es als zusätzliche Ebene einfügen? Ich weiß, dass es sich um eine Ressource handelt, aber ich kann sie nicht zum Laufen bringen. Können Sie mir ein Codebeispiel zeigen?

Wenn Transparenz (COLOR_FORMAT_ARGB_NORMALIZE) verwendet wird, sollte die Transparenz der beiden Ebenen tr1 und tr2 nach folgender Formel gemischt werden

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

Beispiel für ein Skript mit zufälligen Kreisen von zufälliger Farbe und zufälliger Transparenz:


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

@Nikolai Semko

Ich habe noch eine Frage: Wie füge ich ein Bild in die Canvas-Ebene ein oder sollte ich es als zusätzliche Ebene einfügen? Ich verstehe, dass irgendwie durch eine Ressource, aber ich kann nicht alles bekommen, können Sie mir ein Code-Beispiel zeigen?

Wie Sie mit Bildern arbeiten können, erfahren Sie hier .
Schließlich ist ein Bild dasselbe wie eine Reihe von Punkten.
Dieses Beispiel zeigt, wie man Ressourcen von zwei bmp-Dateien in uint-Arrays BMP1[], BMP2[] konvertiert und mit diesen Arrays in einem Canvas weiterarbeitet.

 
Vielen Dank, Nikolai, endlich habe ich das Problem gelöst.
 
Rafil Nurmukhametov:
Vielen Dank, Nikolai, endlich habe ich das Problem gelöst.

Bitte sehr.

 

Erste Versuche mit dem dynamischen Zeitrahmen.

EURUSD alle Geschichte in Dynamik:

.

Fraktalität ist offensichtlich.
 
Nikolai Semko:

Erste Versuche mit dem dynamischen Zeitrahmen.

EURUSD alle Geschichte in Dynamik:

.

Fraktalität ist offensichtlich.
Ich habe Ihren Beitrag auf Englisch gesehen.
Bitte posten Sie mehr auf Englisch, auch auf CodaBase (Ihre Sachen sind dort sehr beliebt).
Für Informationen.
 
Sergey Golubev:
Ich habe Ihren Beitrag auf Englisch gesehen.
Ich möchte Sie bitten, mehr auf Englisch zu posten, auch auf CodaBase (Ihre Sachen sind dort sehr beliebt).
Nur zur Information.
Ich danke Ihnen. Ich werde mein Bestes tun.
Allerdings hatte ich den Eindruck, dass im englischsprachigen Teil des Forums die Reaktion auf meine Beiträge gegen Null ging. Ich habe die ganze Zeit das Gefühl, dass "ich im Stillen zu mir selbst...".
 
Nikolai Semko:

Erste Versuche mit dem dynamischen Zeitrahmen.

EURUSD alle Geschichte in Dynamik:

.

Fraktalität ist offensichtlich.
Gut gemacht!
 
Großartig!
 
Nikolai Semko:

Erste Versuche mit dem dynamischen Zeitrahmen.

EURUSD alle Geschichte in Dynamik:

.

Fraktalität ist offensichtlich.

Ziemlich visuell, interessant.

Können wir uns die Zecken auch auf diese Weise vorstellen?

Grund der Beschwerde: