La toile est cool ! - page 86

 
Aleksandr Slavskii #:

Vous pouvez insérer un fichier sous forme de tableau et accéder ensuite à ce tableau.


Exemple ci-joint

Oui, cela fonctionne. Je ne connaissais pas cette possibilité. Merci !
Mais la taille du fichier mq4 ou mqh sera 5 fois plus grande que le fichier png lui-même. Mais c'est une option qui fonctionne bien, car elle n'affecte pas la taille du fichier ex4 lui-même. (il sera le même que le fichier ex5).

fxsaber #:

Demander aux développeurs d'insérer le PNG ici.

Je suis sûr qu'ils seront d'accord.

Je doute que tous les souhaits et demandes soient mis en œuvre pour MT4, en particulier lorsqu'il est déjà annoncé que le support de MT4 prendra fin bientôt.

 
Vitaliy Kuznetsov #:

Les PNG externes sont réglés, le chargement, la mise à l'échelle, la transparence fonctionnent. Mais...

Est-il réaliste de compiler un PNG à l'intérieur d'un fichier ?

La fonctionnalité standard ...

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

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

... génère une erreur de compilation

Je n'ai pas abordé le fait que le logiciel fonctionne avec un fichier externe, mais comment faire pour que tout le produit final soit un seul fichier ?

Sinon, le sens pratique d'une telle fonctionnalité est perdu. Je n'ai pas essayé avec MT5. Dans MT4, il y a une erreur de connexion.


P.S. Je suppose qu'il est théoriquement possible d'écrire un script qui convertira les PNG en code et que nous le mettrons, disons, dans MQH et que nous travaillerons avec eux dans un seul conteneur. Mais je ne peux pas écrire un tel script. Les tableaux d'images sont une forêt aveugle pour moi.

En dehors de ce qu'Alexander a suggéré (en insérant un tableau uchar[]), il y a aussi une méthode de béquille à travers le pseudo BMP, dont j'ai déjà parlé.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Canvas, c'est cool !

Nikolai Semko, 2023.09.25 17:09

Malheureusement, dans MQL4, il n'y a pas de possibilité d'attacher une ressource en tant que tableau. Mais tout le reste fonctionne.
Bien sûr, cela peut être mis en œuvre par des tambourins durs. Par exemple, insérer une image PNG dans un fichier BMP, c'est-à-dire ajouter un en-tête BMP au début du png, et passer le png lui-même en tant qu'image BMP (c'est-à-dire que si vous ouvrez un tel BMP, il y aura un bruit de pixels colorés de différentes transparences). Ensuite, attachez ce "fichier bmp" en tant que ressource dans MQL4. Cela peut être nécessaire pour le marché, afin que ex4 contienne déjà une image d'un format png plus dense.
Pour référence : le format png est environ 10 fois plus petit que la même image BMP sans perte de qualité, et supporte en outre une transparence totale.
La ressource BMP réelle dans le fichier ex5(ex4) est stockée dans un format compacté, mais pas par un ordre de grandeur inférieur. Il est nécessaire de vérifier exactement.

Vous pouvez écrire un script qui effectue une telle conversion de png en bmp (la taille de la pseudo-image d'un tel fichier sera égale en largeur à la taille du fichier png lui-même, et 1 pixel en hauteur).
Mais vous pouvez faire avec un autre algorithme : Convertir le PNG avec transparence en un vrai BMP avec transparence et l'attacher via une ressource. La taille du fichier ex4 sera légèrement supérieure à celle du fichier png, car dans ex4, la ressource du fichier bmp est stockée dans un format compressé. J'ai vérifié - l'augmentation de la taille d'un fichier ex4 avec un bmp sera de 10 à 30 % supérieure à celle d'un fichier ex4 avec la même image au format png.

Personnellement, je préférerais la variante suggérée par Slavsky. Mettre un tableau uchar séparé dans un fichier mqh séparé, qui contiendra le fichier png lui-même, et l'insérer ensuite dans le code via un include, de sorte que le tableau géant n'encombre pas le code.
De plus, l'avantage de cette méthode est que vous n'avez pas besoin de mettre de fichiers graphiques dans le bac à sable de MQL4, comme dans le cas des ressources.

 
fxsaber #:

Demandez aux développeurs d'insérer un PNG ici.

Je suis sûr qu'ils seront d'accord.

Ajoutons-le à MQL5.

 
Aleksandr Slavskii #:

Vous pouvez insérer un fichier sous forme de tableau et accéder ensuite à ce tableau.

Exemple ci-joint

incroyable, depuis combien de temps ce menu "Insérer" existe-t-il dans ME ? :O

vivre et apprendre...

 
Renat Fatkhullin #:

Ajoutons-le à MQL5.

Le marché montre que tous les produits sont dupliqués pour les deux plateformes. Il est très probable qu'ils n'utiliseront pas la variante non multiplateforme, mais qu'ils resteront assis sur BMP, malheureusement.


Vous pouvez déjà joindre n'importe quel fichier dans MQL5.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
Une telle pièce jointe créera un tableau statique avec des données, et non une ressource. Dans le second cas, il semble qu'elle soit disponible dans d'autres EX4/5.
 
Nikolai Semko #:
Convertir un PNG avec transparence en un vrai BMP avec transparence et l'attacher via une ressource.

Cette option ne fonctionne pas dans MT4, car le BMP avec le canal alpha est attaché mais n'est pas affiché.

fxsaber #:

Le marché montre que tous les produits sont dupliqués pour les deux plateformes. Il est très probable que nous n'utiliserons pas la variante non multiplateforme, et que nous resterons assis sur le BMP, malheureusement.

Je pense que le PNG est déjà devenu multiplateforme. Il fonctionne déjà avec des fichiers externes. Exemples ci-dessus de Nikolay.

Aleksandr Slavskii #:

Vous pouvez insérer un fichier sous forme de tableau et accéder ensuite à ce tableau.

En effet, c'est possible. J'ai été directement surpris.


Il reste à essayer de réaliser dans Canvas tous les trucs avec du caoutchouc, de la transparence et voilà - un petit miracle mq4 est prêt.

Bien sûr, c'est fait pour le multiplateforme. Car sur MT4 - BMP, et sur MT5 - PNG. Ce n'est pas une bonne chose. Tout devrait être au format PNG.

 
Vitaliy Kuznetsov #:

Il reste à essayer d'implémenter dans Canvas tout ce qui est caoutchouteux et transparent et voilà - un petit miracle mq4 est prêt.

Tout est donc déjà prêt. Vous pouvez prendre un exemple de test dans la bibliothèque PNG. Seule la ligne avec la ressource

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

remplacez-la par la ligne

#include <PNG\iconspng.mqh>

où dans le fichier iconspng.mqh nous insérons le tableau png_data[].

Il est seulement nécessaire de se rappeler que dans MT4 il est important de sortir tous les calculs coûteux de OnChartEvent vers le timer, sinon il sera terriblement à la traîne. Purement des conneries de MQL4.
Je vais maintenant publier une version qui ne traîne pas.


 
Nikolai Semko #:

Je suis sur le point de télécharger une version sans décalage.

Oui, il n'y a même pas de lagging si le CPU est en mode "best perfomance".


Dossiers :
MQL4.ZIP  576 kb
 
Andrey Dik #:

Etonnant, depuis combien de temps ce menu "Insérer" existe-t-il dans ME ? :O

vivre et apprendre...

Parmi mes fichiers, où j'ai expérimenté cette insertion de fichier, j'ai retrouvé un fichier créé en novembre 2019. Il m'intéressait déjà avant. Malheureusement, je n'ai pas retrouvé le script où le fichier image a été sauvegardé à partir d'un tel tableau.

 
Alexey Viktorov #:

Parmi mes fichiers, où j'ai expérimenté ce type d'insertion de fichiers, j'ai trouvé un fichier créé en novembre 2019. Il m'intéressait déjà auparavant. Malheureusement, je n'ai pas trouvé le script où le fichier image a été sauvegardé à partir d'un tel tableau.


Super ! fonctionnalité pratique.
Cependant, l'insertion d'ex5 pourrait être encore plus pratique si les déclarations des fonctions exportées étaient affichées.