帆布很酷! - 页 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"

...产生编译错误

我没有深入研究软件与外部文件一起工作的事实,但如何让整个最终产品成为一个文件?

否则就失去了这一功能的实际意义。我还没有在 MT5 中尝试过。在 MT4 中会出现连接错误。


附注:我认为理论上可以编写一个脚本,将 PNG 转换为代码,然后将其放入 MQH,并在一个容器中处理它们。但我写不出这样的脚本。图片数组对我来说是一片盲目的森林。

除了亚历山大建议的方法(通过插入 uchar[] 数组),还有一种通过伪 BMP 的拐杖方法,我已经说过了

关于交易、自动交易系统和测试交易策略的论坛

画布很酷!

Nikolai Semko, 2023.09.25 17:09

不幸的是,在 MQL4 中无法将资源作为数组附加。但其他一切都能正常工作。
当然,可以通过硬手鼓来实现。例如,在 BMP 文件中插入 PNG 图像,即在 png 的开头添加 BMP 头,并将 png 本身作为 bmp 图像传递(即如果打开这样的 BMP,会出现不同透明度的彩色像素噪音)。然后在 MQL4 中将此 "bmp 文件 "作为资源附加。这对于市场来说可能是必要的,这样 ex4 就已经包含了一个更密集的 png 格式图像。
供参考:png 比相同的 BMP 图像小约 10 倍,但质量不变,此外还支持全透明。
在 ex5(ex4)文件中,真正的 BMP 资源是以压缩格式存储的,但不会少一个数量级。有必要进行精确检查。

您可以编写一个脚本,执行从 png 到 bmp 的这种转换(这种文件的伪图像大小将等于 png 文件本身的宽度,高度为 1 像素)。
但您可以使用另一种算法:将带透明度的 PNG 转换为真正的带透明度的 BMP,并通过资源附加它。ex4 文件的大小会比 png 文件略大,因为在 ex4 中,BMP 文件资源是以打包格式存储的。我检查过了,使用 bmp 的 ex4 文件大小会比使用相同图片的 png 格式 ex4 文件大小大 10%-30%。

个人而言,我更喜欢 Slavsky 建议的变体。在一个单独的 mqh 文件中放入一个单独的 uchar 数组,其中包含 png 文件本身,然后通过 include 将其插入代码中,这样巨大的数组就不会使代码变得杂乱无章。
此外,这种方法的优点是您不需要在 MQL4 沙盒中放入任何图形文件,就像资源的情况一样。

 
fxsaber #:

请开发人员在此处插入 PNG。

我相信他们会同意的。

让我们把它添加到 MQL5 中。

 
Aleksandr Slavskii #:

您可以将文件作为数组插入,然后访问该数组。

附加示例

这个 "插入 "菜单在 ME 中存在多久了?:O

活到老学到老...

 
Renat Fatkhullin #:

让我们将其添加到 MQL5。

市场显示,两个平台的所有产品都是重复的。不幸的是,他们很可能不会使用非跨平台变体,而是继续使用 BMP。


即使现在,您也可以在 MQL5 中附加任何文件。

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
这种附件将创建一个包含数据的静态数组,而不是资源。在第二种情况下,似乎可以从其他 EX4/5 中获得。
 
Nikolai Semko #:
将带透明度的 PNG 转换为真正带透明度的 BMP,并通过资源附加。

此选项在 MT4 中不起作用,因为带有阿尔法通道的 BMP 已附加但未显示。

fxsaber#:

市场显示,两个平台的所有产品都是重复的。很可能不会使用非跨平台变体,而将继续使用 BMP。

我认为 PNG 已经实现了跨平台。它已经可以使用外部文件。上面的例子来自 Nikolay。

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 处于 "最佳性能 "模式,它甚至不会卡顿。


附加的文件:
MQL4.ZIP  576 kb
 
Andrey Dik #:

真神奇,ME 中的 "插入 "菜单存在多久了?:O

活到老学到老...

在我尝试插入文件的文件中,我发现了一个创建于 2019 年 11 月的文件。我对它很感兴趣,甚至更早。遗憾的是,我没有找到从此类数组中保存图像文件的脚本。

 
Alexey Viktorov #:

在我尝试插入此类文件的文件中,我发现了一个创建于 2019 年 11 月的文件。我对它很感兴趣,甚至更早。遗憾的是,我没有找到从此类数组中保存图像文件的脚本。


超级方便的功能。
不过,如果能显示导出函数的声明,插入 ex5 可能会更方便。