Leinwand ist cool! - Seite 86

 
Aleksandr Slavskii #:

Sie können eine Datei als Array einfügen und dann auf dieses Array zugreifen.


Beigefügtes Beispiel

Ja, übrigens, das funktioniert. Ich wusste nichts von dieser Möglichkeit. Danke!
Aber die Größe der mq4- oder mqh-Datei wird 5 Mal größer sein als die png-Datei selbst. Aber es ist eine gut funktionierende Option, weil sie die Größe der ex4-Datei selbst nicht beeinflusst. (sie wird die gleiche sein wie die ex5-Datei).

fxsaber #:

Bitten Sie die Entwickler, PNG hier einzufügen.

Ich bin sicher, sie werden zustimmen.

Ich bezweifle, dass alle Wünsche und Anforderungen für MT4 umgesetzt werden, vor allem, wenn bereits angekündigt ist, dass die Unterstützung für MT4 bald endet.

 
Vitaliy Kuznetsov #:

Externe PNGs sind in Ordnung, Laden, Skalieren, Transparenz funktioniert. Aber...

Ist es überhaupt realistisch, ein PNG innerhalb einer Datei zu kompilieren?

Die Standardfunktionalität ...

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

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

... erzeugt einen Kompilierungsfehler

Ich habe mich nicht mit der Tatsache beschäftigt, dass die Software mit einer externen Datei arbeitet, aber wie kann man das gesamte Endprodukt zu einer Datei machen?

Sonst geht der praktische Sinn einer solchen Funktion verloren. Ich habe es in MT5 nicht ausprobiert. In MT4 gibt es einen Verbindungsfehler.


P.S. Ich nehme an, dass es theoretisch möglich ist, ein Skript zu schreiben, das PNG in Code umwandelt, und wir werden es, sagen wir, in MQH einfügen und mit ihnen in einem Container arbeiten. Aber ich kann ein solches Skript nicht schreiben. Bildarrays sind ein blinder Wald für mich.

Abgesehen von dem, was Alexander vorgeschlagen hat (durch Einfügen von uchar[] Array), gibt es auch eine Krückenmethode durch Pseudo-BMP, über die ich bereits gesprochen habe

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Canvas ist cool!

Nikolai Semko, 2023.09.25 17:09

Leider gibt es in MQL4 keine Möglichkeit, eine Ressource als Array anzuhängen. Aber alles andere funktioniert.
Natürlich kann es durch harte Tambourine implementiert werden. Fügen Sie z.B. ein PNG-Bild in eine BMP-Datei ein, d.h. fügen Sie einen BMP-Header am Anfang der png-Datei ein und übergeben Sie die png-Datei selbst als bmp-Bild (d.h. wenn Sie eine solche BMP-Datei öffnen, gibt es ein Rauschen von farbigen Pixeln mit unterschiedlicher Transparenz). Und dann fügen Sie diese "bmp-Datei" als Ressource in MQL4 ein. Dies kann für den Markt notwendig sein, damit ex4 bereits ein Bild in einem dichteren png-Format enthält.
Als Referenz: png ist etwa 10-mal kleiner als das gleiche BMP-Bild ohne Qualitätsverlust, zusätzlich unterstützt volle Transparenz.
Die echte BMP-Ressource in der ex5(ex4)-Datei ist in einem komprimierten Format gespeichert, aber nicht um eine Größenordnung kleiner. Es ist notwendig, genau zu prüfen.

Sie können ein Skript schreiben, das eine solche Konvertierung von png in bmp durchführt (die Größe des Pseudobildes einer solchen Datei entspricht in der Breite der Größe der png-Datei selbst, und 1 Pixel in der Höhe).
Aber Sie können mit einem anderen Algorithmus tun: Konvertieren Sie PNG mit Transparenz in ein echtes BMP mit Transparenz und hängen Sie es über eine Ressource an. Die Größe der ex4-Datei wird etwas größer sein als die der png-Datei, da in ex4 die Ressource der BMP-Datei im gepackten Format gespeichert wird. Ich habe es überprüft - die Größe von ex4 mit bmp wird 10-30% mehr sein als ex4 mit dem gleichen Bild im png-Format.

Ich persönlich würde die von Slavsky vorgeschlagene Variante bevorzugen. Ein separates uchar-Array in eine separate mqh-Datei zu legen, die die png-Datei selbst enthält, und es dann über ein Include in den Code einzufügen, so dass das riesige Array den Code nicht durcheinander bringt.
Außerdem hat diese Methode den Vorteil, dass man keine Grafikdateien in die MQL4-Sandbox legen muss, wie im Fall der Ressourcen.

 
fxsaber #:

Bitten Sie die Entwickler, hier ein PNG einzufügen.

Ich bin sicher, sie werden zustimmen.

Fügen wir es zu MQL5 hinzu.

 
Aleksandr Slavskii #:

Sie können eine Datei als Array einfügen und dann auf dieses Array zugreifen.

Beigefügtes Beispiel

Erstaunlich, wie lange gibt es dieses "Einfügen"-Menü schon in ME? :O

leben und lernen...

 
Renat Fatkhullin #:

Fügen wir es zu MQL5 hinzu.

Markt zeigt, dass alle Produkte für beide Plattformen dupliziert werden. Höchstwahrscheinlich werden sie die plattformunabhängige Variante nicht verwenden, sondern auf BMP sitzen bleiben, leider.


Sie können jede Datei in MQL5 sogar jetzt anhängen.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
Eine solche Anlage wird ein statisches Array mit Daten, nicht eine Ressource erstellen. Im zweiten Fall scheint es von anderen EX4/5 verfügbar sein.
 
Nikolai Semko #:
Konvertieren Sie PNG mit Transparenz in echtes BMP mit Transparenz und hängen Sie es über die Ressource an.

Diese Option funktioniert nicht in MT4, da BMP mit Alphakanal zwar angehängt, aber nicht angezeigt wird.

fxsaber #:

Market zeigt, dass alle Produkte für beide Plattformen dupliziert werden. Höchstwahrscheinlich wird die nicht plattformübergreifende Variante nicht verwendet und bleibt auf BMP sitzen, leider.

Ich denke, PNG ist bereits plattformübergreifend geworden. Es funktioniert bereits mit externen Dateien. Beispiele oben von Nikolay.

Aleksandr Slavskii #:

Sie können eine Datei als Array einfügen und dann auf dieses Array zugreifen.

In der Tat, das geht. Ich war direkt überrascht.


Jetzt muss man nur noch versuchen, den ganzen Kram mit Gummierung und Transparenz in Canvas zu realisieren und schon ist ein kleines mq4-Wunder fertig.

Natürlich wird das plattformübergreifend gemacht. Denn auf MT4 - BMP, und auf MT5 - PNG. Nicht gut. Alles sollte PNG sein.

 
Vitaliy Kuznetsov #:

Man muss nur noch versuchen, die ganze gummiartige, transparente Sache in Canvas zu implementieren, und schon ist ein kleines mq4-Wunder fertig.

Es ist also alles schon fertig. Sie können einen Beispieltest aus der PNG-Bibliothek nehmen. Nur die Zeile mit der Ressource

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

ändern Sie in die Zeile

#include <PNG\iconspng.mqh>

wo wir in der Datei iconspng.mqh das Array png_data[] einfügen.

Nur ist es notwendig, daran zu erinnern, dass in MT4 ist es wichtig, alle kostspieligen Berechnungen von OnChartEvent an den Timer auszugeben, sonst wird es schrecklich verzögern. Reiner MQL4-Bullshit.
Ich werde jetzt eine nicht-laggende Version einstellen.


 
Nikolai Semko #:

Ich bin dabei, eine Version ohne Verzögerungen hochzuladen.

Ja, es lahmt nicht einmal, wenn die CPU im Modus "Beste Leistung" ist.


Dateien:
MQL4.ZIP  576 kb
 
Andrey Dik #:

Erstaunlich, wie lange gibt es dieses "Einfügen"-Menü in ME schon? :O

leben und lernen...

Unter meinen Dateien, in denen ich mit dem Einfügen solcher Dateien experimentiert habe, fand ich eine Datei, die im November 2019 erstellt wurde. Das hat mich schon früher interessiert. Leider habe ich das Skript nicht gefunden, in dem die Bilddatei aus einem solchen Array gespeichert wurde.

 
Alexey Viktorov #:

Unter meinen Dateien, in denen ich mit dem Einfügen solcher Dateien experimentiert habe, fand ich eine Datei, die im November 2019 erstellt wurde. Ich war schon früher daran interessiert. Leider habe ich das Skript nicht gefunden, in dem die Bilddatei aus einem solchen Array gespeichert wurde.


Super! praktisches Feature.
Allerdings könnte das Einfügen von ex5 noch bequemer sein, wenn die Deklarationen der exportierten Funktionen angezeigt würden.