A lona é legal! - página 86

 
Aleksandr Slavskii #:

Você pode inserir um arquivo como uma matriz e, em seguida, acessar essa matriz.


Exemplo em anexo

Sim, a propósito, isso funciona. Eu não sabia dessa possibilidade. Obrigado!
Mas o tamanho do arquivo mq4 ou mqh será 5 vezes maior do que o próprio arquivo png. Mas essa é uma opção bastante funcional, pois não afeta o tamanho do arquivo ex4 em si. (ele será o mesmo do arquivo ex5).

fxsaber #:

Peça aos desenvolvedores que insiram o PNG aqui.

Tenho certeza de que eles concordarão.

Duvido que quaisquer desejos e solicitações sejam implementados para o MT4, especialmente quando já foi anunciado que o suporte ao MT4 será encerrado em breve.

 
Vitaliy Kuznetsov #:

PNGs externos resolvidos, carregamento, dimensionamento e transparência funcionam. Mas...

É realista compilar um PNG dentro de um arquivo?

A funcionalidade padrão ...

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

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

... gera um erro de compilação

Não cheguei a analisar o fato de o software funcionar com um arquivo externo, mas como fazer com que todo o produto final seja um único arquivo?

Caso contrário, o sentido prático desse recurso se perderá. Não tentei fazer isso no MT5. No MT4, há um erro de conexão.


P.S. Presumo que, teoricamente, seja possível escrever um script que converta PNG em código e nós o colocaremos, digamos, no MQH e trabalharemos com eles em um contêiner. Mas não consigo escrever esse script. As matrizes de imagens são uma floresta cega para mim.

Além do que Alexander sugeriu (por meio da inserção da matriz uchar[]), há também um método de muleta por meio de pseudo BMP, sobre o qual já falei

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

O Canvas é legal!

Nikolai Semko, 2023.09.25 17:09

Infelizmente, na MQL4 não há possibilidade de anexar um recurso como uma matriz. Mas todo o resto funciona.
É claro que isso pode ser implementado por meio de pandeiros rígidos. Por exemplo, insira uma imagem PNG em um arquivo BMP, ou seja, adicione um cabeçalho BMP ao início do png e passe o próprio png como uma imagem bmp (ou seja, se você abrir esse BMP, haverá um ruído de pixels coloridos de transparência diferente). E, em seguida, anexe esse "arquivo bmp" como um recurso em MQL4. Isso pode ser necessário para o mercado, de modo que o ex4 já contenha uma imagem de um formato png mais denso.
Para referência: png é cerca de 10 vezes menor do que a mesma imagem BMP sem perda de qualidade, além de suportar transparência total.
O verdadeiro recurso bmp no arquivo ex5(ex4) é armazenado em um formato compactado, mas não em uma ordem de magnitude menor. É necessário verificar com exatidão.

Você pode escrever um script que execute essa conversão de png para bmp (o tamanho da pseudo-imagem desse arquivo será igual em largura ao tamanho do próprio arquivo png e 1 pixel de altura).
Mas você pode fazer isso com outro algoritmo: Converta o PNG com transparência em um BMP real com transparência e anexe-o por meio de um recurso. O tamanho do arquivo ex4 será um pouco maior do que o tamanho do arquivo png, porque no ex4 o recurso do arquivo bmp é armazenado em formato compactado. Eu verifiquei que o aumento do tamanho do ex4 com bmp será de 10 a 30% maior do que o do ex4 com a mesma imagem no formato png.

Pessoalmente, eu preferiria a variante sugerida por Slavsky. Colocar uma matriz uchar separada em um arquivo mqh separado, que conterá o próprio arquivo png e, em seguida, inseri-lo no código por meio de um include, de modo que a matriz gigante não atrapalhe o código.
Além disso, a vantagem desse método é que você não precisa colocar nenhum arquivo gráfico na sandbox MQL4, como no caso dos recursos.

 
fxsaber #:

Solicite aos desenvolvedores que insiram um PNG aqui.

Tenho certeza de que eles concordarão.

Vamos adicioná-lo à MQL5.

 
Aleksandr Slavskii #:

Você pode inserir um arquivo como uma matriz e, em seguida, acessar essa matriz.

Exemplo em anexo

Incrível, há quanto tempo esse menu "Insert" está no ME? :O

viver e aprender...

 
Renat Fatkhullin #:

Vamos adicioná-lo à MQL5.

O mercado mostra que todos os produtos são duplicados para ambas as plataformas. Muito provavelmente, eles não usarão a variante não multiplataforma, mas permanecerão no BMP, infelizmente.


Você pode anexar qualquer arquivo em MQL5 mesmo agora.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
Esse anexo criará uma matriz estática com dados, não um recurso. No segundo caso, ele parece estar disponível em outros EX4/5.
 
Nikolai Semko #:
Converta PNG com transparência em BMP real com transparência e anexe-o via recurso.

Essa opção não funciona no MT4, porque o BMP com canal alfa é anexado, mas não é exibido.

fxsaber #:

O mercado mostra que todos os produtos são duplicados em ambas as plataformas. Provavelmente, não usaremos a variante que não é de plataforma cruzada e, infelizmente, continuaremos usando o BMP.

Acho que o PNG já se tornou multiplataforma. Ele já funciona com arquivos externos. Exemplos acima de Nikolay.

Aleksandr Slavskii #:

Você pode inserir um arquivo como uma matriz e, em seguida, acessar essa matriz.

De fato, isso acontece. Fiquei diretamente surpreso.


Resta tentar realizar no Canvas todas as coisas com emborrachamento, transparência e pronto - um pequeno milagre mq4 está pronto.

É claro que isso é feito para várias plataformas. Porque no MT4 - BMP, e no MT5 - PNG. Não é bom. Tudo deveria ser PNG.

 
Vitaliy Kuznetsov #:

Resta tentar implementar no Canvas toda a parte emborrachada e transparente e pronto - um pequeno milagre mq4 está pronto.

Portanto, tudo já está pronto. Você pode fazer um teste de exemplo da biblioteca PNG. Apenas a linha com o recurso

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

altere-a para a linha

#include <PNG\iconspng.mqh>

onde, no arquivo iconspng.mqh, inserimos a matriz png_data[].

Só é necessário lembrar que, no MT4, é importante enviar todos os cálculos dispendiosos de OnChartEvent para o cronômetro, caso contrário, haverá um atraso terrível. Pura besteira da MQL4.
Agora vou baixar uma versão sem atraso.


 
Nikolai Semko #:

Estou prestes a carregar uma versão sem atrasos.

Sim, ele não apresenta atraso nem mesmo se a CPU estiver no modo de "melhor desempenho".


Arquivos anexados:
MQL4.ZIP  576 kb
 
Andrey Dik #:

Incrível, há quanto tempo existe esse menu "Inserir" no ME? :O

viver e aprender...

Entre meus arquivos, onde experimentei essa inserção de arquivo, encontrei um arquivo criado em novembro de 2019. Eu estava interessado nele ainda antes. Infelizmente, não encontrei o script em que o arquivo de imagem foi salvo a partir dessa matriz.

 
Alexey Viktorov #:

Entre meus arquivos, onde experimentei essa inserção de arquivo, encontrei um arquivo criado em novembro de 2019. Eu estava interessado nele ainda antes. Infelizmente, não encontrei o script em que o arquivo de imagem foi salvo a partir dessa matriz.


super! recurso útil.
No entanto, a inserção do ex5 poderia ser ainda mais conveniente se as declarações das funções exportadas fossem exibidas.