Hola@Nikolai Semko, ¿podrías decirme si es posible hacer un objeto transparente superpuesto al texto en una capa del lienzo, ver la imagen? El segundo círculo transparente es la segunda capa, este objeto no me supone ningún problema para hacerlo transparente.
Una pregunta más, ¿cómo insertar una imagen en la capa del lienzo o debo colocarla como una capa adicional? Sé que es un recurso, pero no consigo que funcione, ¿puedes mostrarme un ejemplo de código?
Si se utiliza la transparencia (COLOR_FORMAT_ARGB_NORMALIZE), la transparencia de dos capas tr1 y tr2 debe mezclarse mediante la fórmula
double tr=tr1+tr2-tr1*tr2; // где tr, tr1, tr1 меняются от нуля (абсолютная прозрачность) до 1(абсолютная непрозрачность)
Ejemplo de un guión con círculos aleatorios de color aleatorio y transparencia aleatoria:
#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164#define Num 100//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
// инициализация случайных окружностей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;
}
//+------------------------------------------------------------------+
Tengo una pregunta más: ¿cómo insertar una imagen en la capa del lienzo o debo colocarla como una capa adicional? Entiendo que de alguna manera a través de un recurso, pero no consigo nada, ¿puedes mostrarme un ejemplo de código?
Puede ver cómo trabajar con imágenes aquí . Al fin y al cabo, una imagen es lo mismo que una matriz de puntos. Este ejemplo muestra cómo convertir los recursos de dos archivos bmp en arrays uint BMP1[], BMP2[] y seguir trabajando con estos arrays en un lienzo.
Sergey Golubev: He visto tu mensaje en inglés. Quiero pedirte que publiques más en la parte inglesa, incluyendo KodaBase (tu material es muy popular allí). Sólo para información.
Gracias. Haré lo que pueda.
Sin embargo, me pareció que en la parte anglófona del foro, la reacción a mis mensajes fue casi nula. La sensación todo el tiempo es que "en silencio para mí...".
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hola@Nikolai Semko, ¿podrías decirme si es posible hacer un objeto transparente superpuesto al texto en una capa del lienzo, ver la imagen? El segundo círculo transparente es la segunda capa, este objeto no me supone ningún problema para hacerlo transparente.
Una pregunta más, ¿cómo insertar una imagen en la capa del lienzo o debo colocarla como una capa adicional? Sé que es un recurso, pero no consigo que funcione, ¿puedes mostrarme un ejemplo de código?
Si se utiliza la transparencia (COLOR_FORMAT_ARGB_NORMALIZE), la transparencia de dos capas tr1 y tr2 debe mezclarse mediante la fórmula
Ejemplo de un guión con círculos aleatorios de color aleatorio y transparencia aleatoria:
@Nikolai Semko
Tengo una pregunta más: ¿cómo insertar una imagen en la capa del lienzo o debo colocarla como una capa adicional? Entiendo que de alguna manera a través de un recurso, pero no consigo nada, ¿puedes mostrarme un ejemplo de código?
Puede ver cómo trabajar con imágenes aquí .
Al fin y al cabo, una imagen es lo mismo que una matriz de puntos.
Este ejemplo muestra cómo convertir los recursos de dos archivos bmp en arrays uint BMP1[], BMP2[] y seguir trabajando con estos arrays en un lienzo.
Muchas gracias Nikolai, por fin lo he solucionado
De nada.
Primeros experimentos con el marco temporal dinámico.
EURUSD toda la historia en la dinámica:
.
La fractura es evidente.Primeros experimentos con el marco temporal dinámico.
EURUSD toda la historia en la dinámica:
.
La fractura es evidente.Por favor, publica más en inglés, incluyendo CodaBase (tu material es muy popular allí).
Para información.
He visto tu mensaje en inglés.
Quiero pedirte que publiques más en la parte inglesa, incluyendo KodaBase (tu material es muy popular allí).
Sólo para información.
Primeros experimentos con el marco temporal dinámico.
EURUSD toda la historia en la dinámica:
.
La fractura es evidente.Primeros experimentos con el marco temporal dinámico.
EURUSD toda la historia en la dinámica:
.
La fractura es evidente.Bastante visual, interesante.
¿Te imaginas las garrapatas también de esta manera?