El lienzo es genial. - página 88

 
Vitaliy Kuznetsov #:

También he observado un error

Esta imagen causó un error. Es definitivamente un PNG, pero no tiene DPI en los datos

//upd. Algunas de ellas tampoco tienen datos PDI, pero funcionan.

Como ya he escrito que el algoritmo de descompresión PNG no fue desarrollado por mí, soy Zorro hace 7 años. Para ser más precisos, debió portarlo de algún código C++. Además, este código siempre daba un error, y yo simplemente obviaba este error ignorándolo, después de lo cual la descompresión funcionaba. Por eso puede haber algunas juntas. No entendí la especificación del formato PNG y sus versiones. Tal vez usted necesita para bucear en este formato o formato jpg con más detalle.

Especialmente este archivo png está torcido con cuadrados sin transparencia con máscara de color de 8 bits en lugar de 24 bits.

 
Renat Akhtyamov configurar indicadores....

como este

Supongo que irá bien en el mercado.

Por eso hice un ejemplo con parseo y escalado de iconos sobre fondo transparente.


 
Nikolai Semko #:

Como ya he escrito, el algoritmo de descompresión PNG no lo desarrollé yo, sino Zorro hace 7 años. Para ser más preciso, él debió portarlo de algún código C++. Además, este código siempre daba un error, y yo simplemente lo ignoraba, después de lo cual la descompresión funcionaba. Por eso puede haber algunas juntas. No entendí la especificación del formato PNG y sus versiones. Quizás necesite profundizar más en este formato o en el formato jpg.

Especialmente este archivo png está torcido con cuadrados sin transparencia con máscara de color de 8 bits en lugar de 24 bits.

Nikolai Semko #:

Lo he probado. Me di cuenta de cuadrados sólo en caso de cambio de tamaño. Por eso mi algoritmo de redimensionamiento probablemente no es perfecto. Ya he escrito una vez que este algoritmo fue creado sobre la marcha, literalmente, en medio día hace bastante tiempo. Ahora haría este algoritmo de manera muy diferente. Pero, por desgracia, no tengo tiempo todavía.

Yo mismo entiendo que escribir un código para 3+ es un día y para 5+ es un mes. Y si el proyecto es grande, los plazos pueden estar en rangos aún mayores.

Sobre lo que tenemos, gracias. Esto es suficiente por ahora.

 

¿Hay alguna manera en kanvas para llenar la pantalla con un gradiente circular desde el centro?

Había un ejemplo de un gradiente vertical aquí - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

¿Tiene canvas alguna forma de rellenar la pantalla con un degradado circular desde el centro?

Había un ejemplo de un gradiente vertical aquí - https://www.mql5.com/ru/code/31689

es fácil de hacer.
sólo necesitas una fórmula:

R2 = X2+Y2

Creo que incluso di la función

 
Vitaliy Kuznetsov #:

¿Tiene canvas alguna forma de rellenar la pantalla con un degradado circular desde el centro?

Había un ejemplo de un gradiente vertical aquí - https://www.mql5.com/ru/code/31689

puede utilizar esta opción:

void iCanvas::RadiusGrad(double x, double y, double r, uint clr_center, uint clr_end){
   int x_left = Floor(x-r);
   int x_right = Ceil(x+r);
   int y_top = Floor(y-r);
   int y_bottom = Ceil(y+r);
   double r2=r*r;
   if (x_left<0) x_left = 0;
   if (x_left>=m_width) return;
   if (x_right>m_width) x_right = m_width;
   if (x_right<0) return;
   
   if (y_top<0) y_top = 0;
   if (y_top>=m_height) return;
   if (y_bottom>m_height) y_bottom = m_height;
   if (y_bottom<0) return;
   
   argb c1,c2, c;
   c1.clr =clr_center;
   c2.clr =clr_end;
   
   for(int i_y=y_top;i_y<y_bottom;i_y++) {
      for(int i_x=x_left;i_x<x_right;i_x++) {
         int adr = i_y*m_width+i_x;
         double r1 = (i_x-x)*(i_x-x)+(i_y-y)*(i_y-y);
         if (r1<=r2) {
            double k = sqrt(r1)/r;
            for (int i=0;i<4;i++) c.c[i] = uchar(c1.c[i] + k*((int)c2.c[i]-c1.c[i]));
            MixColor(c.clr,m_pixels[adr]);
         }
      }
   }
}
gradiente va también por el canal alfa (transparencia)
Archivos adjuntos:
 
Nikolai Semko #:

puede utilizar esta opción:

gradiente va también por el canal alfa(transparencia)

Gracias, lo probaré.

 

Nikolai, ¡hola!

Una vez te pedí que crear deslizadores para que sea conveniente para elegir el período de visualización del gráfico

Me refería a esto:


¡muy conveniente!
 
Renat Akhtyamov #:

Nikolai, ¡hola!

Una vez te pedí que crear deslizadores para que sea conveniente para elegir el período de visualización del gráfico

Me refería a esto:


¡muy conveniente!
En primer lugar, no es muy conveniente (IMHO).
En segundo lugar, estas realizaciones llevan mucho tiempo.
 
Nikolai Semko #:
En primer lugar, no es muy conveniente (IMHO)
La cuestión es que al implementar algo así, inevitablemente te enfrentarás a una catastrófica falta de longitud del deslizador.
Por regla general, esto se implementa en un solo deslizador, no en uno, cuya anchura se puede cambiar arrastrando el botón por sus bordes, cambiando así la escala. Pero este enfoque no resuelve el problema de la longitud del deslizador, aunque es más conveniente.
Razón de la queja: