El lienzo es genial. - página 43

 
khorosh:

Por qué lo hiciste, escribiste que no necesitabas un horario en absoluto).

Por la belleza.
 
Реter Konow:

Gracias. No es un cuadro .bmp comprimido a la fuerza bruta con el comando #resource, ¿verdad? ))) Definitivamente no. Es un adaptador natural para reproducir un archivo gif en MQL-canvas, basado en un lector de .gif portado, que fue escrito en un par de horas. Debo parecer un idiota desde fuera)))

Yuri, gracias por la demostración, pero cualquiera puede hacer algo así. Fácil.

  1. Toma un simple gif. Grábalo en vídeo.
  2. Obtenga todos sus fotogramas del vídeo.
  3. Guarda los cuadros en formato .bmp, numerados.

  4. Integrar los marcos al script a través de #recurso.

  5. Recorre los marcos y muéstralos uno a uno en el lienzo en un bucle sin fin.

Como resultado, obtenemos un pseudo-gif que no tiene relación con la representación en formato gif estándar en los programas MQL.

//-----------------------------

Añadido:

Diré que también tengo un "pseudogif", pero la tecnología es mucho más compleja. Tiene compresión de autor y un mecanismo de reproducción. Y lo más importante, los "pseudo-gifs" están ligados a sus elementos y se reproducen a partir de una matriz común. La compresión funciona mejor que a través de la directiva #resource porque los colores que no cambian no se registran de un fotograma a otro.


¿Qué tipo de editor de vídeo no puede abrir gifs animados? Photoshop los abre y coloca los marcos en capas. Pero hay una solución aún más fácil - servicio en línea - subir gifs animados allí, en un minuto se obtiene una carpeta comprimida con los marcos individuales.

 
¿Qué sentido tiene discutir sobre si la solución es portadora o no? El formato es estándar, por lo que la forma de trabajar con él debe ser estándar y, por cierto, desarrollada al mismo tiempo que el desarrollo del propio formato.
 
Archivos adjuntos:
puh.ex5  29 kb
 
Yury Kulikov:

 

Saludos.

¿Alguien sabe por qué no se puede dibujar una línea de 2 píxeles? ¿Qué tipo de discriminación es ésta? )

void CCanvas::PolylineThick(const int &x[],const int &y[],const uint clr,const int size,const uint style,ENUM_LINE_END end_style)
  {
   if(size<=2)
     {
      if(size>0)
         PolylineWu(x,y,clr,style);
      return;
     }
...
 
Grueso significa "grueso" y 2 píxeles no es nada grueso.
 
Dmitry Fedoseev:
Grueso significa "grueso" y 2 píxeles no es nada grueso.
Espesor superior a 1 píxel )
 
Oleksii Chepurnyi:

Saludos.

¿Tal vez alguien sepa por qué no se puede dibujar una línea con 2 píxeles? ¿Qué tipo de discriminación es ésta? )

Sí, y si lo sustituyes por if(size<2), dibuja, pero de forma inexacta:


@Nikolai Semko, ¿hay algún problema con el suavizado?

 
Andrey Khatimlianskii:

@Nikolai Semko, ¿hay algún problema con el antialiasing aquí?

Estas funciones están terriblemente mal escritas. Hay que ponerse al día. No hay antialiasing normal, ni manejo normal de la mezcla de colores y la transparencia. Deberías arrugarlos y tirarlos a la papelera, y escribir otros nuevos.
Ya he escrito sobre ello aquí.

En cualquier caso, debería reemplazar la función regular PixelTransform por ésta:

https://www.mql5.com/ru/forum/1111/page2553#comment_13054823

Empecé a escribir mi versión doble (donde todos los parámetros de entrada int son dobles), pero no la terminé y la dejé en la estantería. No es una tarea muy sencilla a pesar de su aparente simplicidad. Bueno, no es un problema escribirlo con precisión, el problema es escribir una calidad muy alta, para que el algoritmo sea rápido. Mi principal problema es el perfeccionismo.
Razón de la queja: