キャンバスがカッコいい! - ページ 86

 
Aleksandr Slavskii #:

ファイルを配列として挿入し、その配列にアクセスすることができる。


添付の例

なるほど、これは使える。この可能性は知りませんでした。
しかし、mq4またはmqhファイルのサイズは、pngファイル自体の5倍になります。しかし、ex4ファイル自体のサイズには影響しないので、これはかなり有効なオプションです。(ex5ファイルと同じになります)。

fxsaber#:

開発者にここにPNGを挿入するよう依頼する。

彼らは同意すると思います。

特にMT4のサポートがまもなく終了することがすでに発表されている今、どんな希望や要望もMT4に実装されるとは思えません。

 
Vitaliy Kuznetsov #:

外部PNGが整理され、読み込み、拡大縮小、透過がうまくいった。しかし

ファイル内でPNGをコンパイルするのは現実的なのだろうか?

標準機能では.

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

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

...コンパイルエラーを発生させる

このソフトが外部ファイルで動作することについては触れませんでしたが、最終的に全体を1つのファイルにするにはどうすればいいのでしょうか?

そうでなければ、このような機能の実用的な意味が失われてしまう。MT5では試していない。MT4では接続エラーが発生する。


追伸:PNGをコードに変換するスクリプトを書くことは理論的には可能で、それを例えばMQHに入れて、1つのコンテナで作業することになると思います。しかし、私にはそんなスクリプトは書けない。ピクチャ・アレイは私にとって盲目の森なのだ。

Alexanderが提案した方法(uchar[]配列を挿入する方法)とは別に、擬似BMPを使う方法もあります。

取引、自動取引システム、取引戦略のテストに関するフォーラム

キャンバスはクールです!

ニコライ・セムコ, 2023.09.25 17:09

残念ながら、MQL4ではリソースを配列としてアタッチすることはできません。しかし、それ以外はすべて機能します。
もちろん、ハード・タンバリンを使って実装することもできる。例えば、PNG画像をBMPファイルに挿入する。つまり、pngの先頭にBMPヘッダを追加し、png自体をbmp画像として渡す(つまり、そのようなBMPを開くと、透明度の異なるカラーピクセルのノイズが発生する)。そして、この「bmpファイル」をMQL4のリソースとして添付する。これは市場にとって必要なことで、ex4にはすでに高密度のpng形式の画像が含まれている。
参考までに:pngは同じBMP画像より約10倍小さく、画質を損なわず、さらに完全な透明度をサポートしています。
ex5(ex4)ファイル内の真のbmpリソースは、コンパクト化されたフォーマットで保存されますが、桁が1つ少ないわけではありません。正確な確認が必要である。

このようなpngからbmpへの変換を行うスクリプトを書くことができる(このようなファイルの擬似画像のサイズは、幅がpngファイル自体のサイズに等しく、高さが1ピクセルになる)。
しかし、別のアルゴリズムで行うことができる:透過PNGを透過BMPに変換し、リソースで添付します。ex4ではbmpファイルのリソースはパックされた形式で保存されるため、ex4ファイルのサイズはpngファイルのサイズより若干大きくなります。

個人的には、Slavsky氏が提案した方法の方がいいと思います。別のmqhファイルに別のuchar配列を入れ、そこにpngファイルそのものを入れ、それをインクルードしてコードに挿入することで、巨大な配列がコードを乱雑にしないようにします。
さらに、この方法の利点は、リソースの場合のようにMQL4のサンドボックスにグラフィックファイルを入れる必要がないことです。

 
fxsaber #:

開発者にここにPNGを挿入するよう依頼する。

きっと同意してくれるはずだ。

MQL5に追加しよう。

 
Aleksandr Slavskii #:

ファイルを配列として挿入し、その配列にアクセスすることができる。

添付の例

この "Insert "メニューはいつからMEにあるんだ?:O

生きて学べ...

 
Renat Fatkhullin #:

MQL5に追加しよう。

市場を見ると、すべての製品が両プラットフォームで重複している。ほとんどの場合、クロスプラットフォームでないバリアントは使われず、残念ながらBMPに座ったままになるだろう。


MQL5では、今でもどんなファイルでも添付できる。

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
このような添付は、リソースではなく、データの静的配列を作成します。2つ目のケースでは、他のEX4/5から利用できるようだ。
 
Nikolai Semko #:
透過PNGを透過BMPに変換し、リソース経由で添付します。

このオプションはMT4では機能しません。アルファチャンネル付きのBMPは添付されますが、表示されないからです。

fxsaber#:

マーケットを見ると、すべての商品が両プラットフォームで重複しています。ほとんどの場合、クロスプラットフォームでないバリアントは使用されず、残念ながらBMPのままとなるでしょう。

PNGはすでにクロスプラットフォームになっていると思います。PNGはすでに外部ファイルと連動しています。上記のニコライの例

Aleksandr Slavskii#:

ファイルを配列として挿入し、その配列にアクセスすることができます。

確かにそうです。直接驚きました。


あとはCanvasでゴムのようなもの、透明度のあるものを実現すれば、小さなmq4の奇跡が完成する。

もちろん、これはクロスプラットフォームのために行われる。MT4ではBMP、MT5ではPNGだからだ。ダメだ。すべてPNGであるべきだ。

 
Vitaliy Kuznetsov #:

あとはCanvasにゴムのような透明なものを実装してみれば、小さなmq4の奇跡が完成する。

つまり、すべての準備はすでに整っているのだ。PNGライブラリのテスト例をご覧ください。リソース

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

という行を

#include <PNG\iconspng.mqh>

iconspng.mqhファイルにpng_data[]配列を挿入します。

ただ、MT4では、OnChartEventからすべてのコストのかかる計算をタイマーに出力することが重要であり、そうでなければひどく遅れることを覚えておく必要がある。純粋にMQL4のでたらめだ。
ラグを発生させないバージョンを公開する予定だ。


 
Nikolai Semko #:

ラグがないバージョンをアップロードするところだ。

CPUが "best perfomance "モードならラグもない。


ファイル:
MQL4.ZIP  576 kb
 
Andrey Dik #:

MEの "Insert "メニューはいつからあったんだ?:O

生きて学べ...

そんなファイル挿入の実験をしたファイルの中に、2019年11月に作成されたファイルがあった。もっと前から興味があった。残念ながら、このような配列から画像ファイルを保存したスクリプトは見つかっていない。

 
Alexey Viktorov #:

そんなファイル挿入の実験をした私のファイルの中に、2019年11月に作成されたファイルがあった。もっと前から気になっていたのだ。残念ながら、このような配列から画像ファイルを保存したスクリプトは見つからなかった。


超!便利な機能だ。
エクスポートした関数の宣言が表示されれば、さらに便利なのだが。