El lienzo es genial. - página 86

 
Aleksandr Slavskii #:

Puede insertar un archivo como una matriz y luego acceder a esa matriz.


Ejemplo adjunto

Sí, por cierto, esto funciona. No conocía esta posibilidad. Gracias!
Pero el tamaño del archivo mq4 o mqh será 5 veces mayor que el del propio archivo png. Pero es una opción que funciona bastante bien, porque no afecta al tamaño del propio archivo ex4. (será el mismo que el del archivo ex5).

fxsaber #:

Pedir a los desarrolladores que inserten PNG aquí.

Seguro que estarán de acuerdo.

Dudo que se implementen deseos y peticiones para MT4, especialmente cuando ya se ha anunciado que el soporte de MT4 terminará pronto.

 
Vitaliy Kuznetsov #:

PNGs externos resueltos, la carga, la escala, la transparencia funciona. Pero...

¿Es realista compilar un PNG dentro de un archivo?

La funcionalidad estándar ...

#resource "\\Files\\123.png"

string nam_img = "::Files\\123.png"

... genera un error de compilación

¿Cómo hacer que todo el producto final sea un solo archivo?

De lo contrario se pierde el sentido práctico de tal característica. No lo he probado en MT5. En MT4 hay un error de conexión.


P.D. Asumo que es teóricamente posible escribir un script que convierta PNG en código y lo pongamos, digamos, en MQH y trabajemos con ellos en un contenedor. Pero no puedo escribir tal script. Las matrices de imágenes son un bosque ciego para mí.

Aparte de lo que Alexander sugirió (a través de la inserción de uchar[] array), también hay un método de muleta a través de pseudo BMP, que ya he hablado de

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

¡Canvas es genial!

Nikolai Semko, 2023.09.25 17:09

Por desgracia, en MQL4 no hay posibilidad de adjuntar un recurso como una matriz. Pero todo lo demás funciona.
Por supuesto, se puede implementar a través de panderetas duras. Por ejemplo, insertar una imagen PNG en un archivo BMP, es decir, añadir una cabecera BMP al principio del png, y pasar el propio png como una imagen bmp (es decir, si abres tal BMP, habrá un ruido de píxeles coloreados de diferente transparencia). Y luego adjuntar este "archivo bmp" como un recurso en MQL4. Esto puede ser necesario para el mercado, por lo que ex4 ya contiene una imagen de un formato png más denso.
Como referencia: png es unas 10 veces más pequeño que la misma imagen BMP sin pérdida de calidad, además de soportar total transparencia.
Verdadero recurso bmp en ex5(ex4) archivo se almacena en un formato compactado, pero no por un orden de magnitud menor. Es necesario comprobarlo con exactitud.

Puede escribir un script que realice dicha conversión de png a bmp (el tamaño de la pseudo-imagen de dicho archivo será igual en anchura al tamaño del propio archivo png, y 1 píxel en altura).
Pero puede hacerlo con otro algoritmo: Convertir PNG con transparencia en un BMP real con transparencia y adjuntarlo mediante un recurso. El tamaño del archivo ex4 será ligeramente mayor que el tamaño con archivo png, porque en ex4 el recurso de archivo bmp se almacena en formato empaquetado. Lo he comprobado - el aumento de tamaño de ex4 con bmp será de 10-30% más que ex4 con la misma imagen en formato png.

Personalmente, preferiría la variante sugerida por Slavsky. Poner un array uchar separado en un archivo mqh separado, que contendrá el propio archivo png, y luego insertarlo en el código a través de un include, para que el array gigante no desordene el código.
Además, la ventaja de este método es que no necesitas poner ningún archivo gráfico en el sandbox de MQL4, como en el caso de los recursos.

 
fxsaber #:

Pida a los desarrolladores que inserten un PNG aquí.

Seguro que estarán de acuerdo.

Añadámoslo a MQL5.

 
Aleksandr Slavskii #:

Puede insertar un archivo como una matriz y luego acceder a esa matriz.

Ejemplo adjunto

increíble, ¿cuánto tiempo ha estado este menú "Insertar" en ME? :O

vivir y aprender...

 
Renat Fatkhullin #:

Vamos a añadirlo a MQL5.

El mercado muestra que todos los productos están duplicados para ambas plataformas. Lo más probable es que no van a utilizar la variante no multiplataforma, pero permanecerá sentado en BMP, por desgracia.


Usted puede adjuntar cualquier archivo en MQL5 incluso ahora.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
Tal archivo adjunto creará una matriz estática con datos, no un recurso. En el segundo caso, parece estar disponible desde otros EX4/5.
 
Nikolai Semko #:
Convertir PNG con transparencia en BMP real con transparencia y adjuntarlo mediante recurso.

Esta opción no funciona en MT4, porque el BMP con canal alfa se adjunta pero no se muestra.

fxsaber #:

Market muestra que todos los productos están duplicados para ambas plataformas. Lo más probable es que no utilizar la variante no multiplataforma, y permanecerá sentado en BMP, por desgracia.

Creo que PNG ya se ha convertido en multiplataforma. Ya funciona con archivos externos. Ejemplos de Nikolay.

Aleksandr Slavskii #:

Puedes insertar un archivo como un array y luego acceder a este array.

Efectivamente, funciona. Me ha sorprendido directamente.


Queda intentar realizar en Canvas todas las cosas con goma, transparencia y ya está - un pequeño milagro mq4 está listo.

Por supuesto, esto se hace para multiplataforma. Porque en MT4 - BMP, y en MT5 - PNG. No es bueno. Todo debe ser PNG.

 
Vitaliy Kuznetsov #:

Queda intentar implementar en Canvas todo lo gomoso y transparente y listo, un pequeño milagro mq4 está listo.

Así que ya está todo listo. Puedes tomar un ejemplo de prueba de la librería PNG. Sólo la línea con el recurso

#resource "//Images//icons.png" as uchar png_data[]

cámbiala por la línea

#include <PNG\iconspng.mqh>

donde en el archivo iconspng.mqh insertamos el array png_data[].

Solo hay que recordar que en MT4 es importante dar salida a todos los cálculos costosos del OnChartEvent al timer, de lo contrario se retrasará terriblemente. Pura mierda de MQL4.
Ahora dejaré una versión sin lag.


 
Nikolai Semko #:

Estoy a punto de subir una versión sin retrasos.

Sí, ni siquiera tiene lag si la CPU está en modo "mejor rendimiento".


Archivos adjuntos:
MQL4.ZIP  576 kb
 
Andrey Dik #:

Increíble, ¿desde cuándo existe este menú "Insertar" en ME? :O

vivir y aprender...

Entre mis archivos, donde experimenté con dicha inserción de archivos, encontré un archivo creado en noviembre de 2019. Me interesó incluso antes. Por desgracia, no he encontrado el script donde se guardó el archivo de imagen de tal matriz.

 
Alexey Viktorov #:

Entre mis archivos, donde experimenté con dicha inserción de archivos, encontré un archivo creado en noviembre de 2019. Me interesó incluso antes. Lamentablemente no encontré el script donde se guardaba el archivo de imagen de tal matriz.


Una función muy útil.
Aunque, la inserción de ex5 podría ser aún más conveniente si se mostraran las declaraciones de las funciones exportadas.
Razón de la queja: