캔버스 멋지다! - 페이지 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에 넣고 하나의 컨테이너에서 작업 할 것입니다. 하지만 저는 그런 스크립트를 쓸 수 없습니다. 그림 배열은 저에게는 막막한 숲입니다.

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 리소스는 압축된 형식으로 저장되지만 그보다 훨씬 적은 양은 아닙니다. 정확히 확인할 필요가 있습니다.

이러한 변환을 수행하는 스크립트를 작성할 수 있습니다(이러한 파일의 의사 이미지의 크기는 너비가 png 파일 자체의 크기와 같고 높이는 1픽셀).
그러나 다른 알고리즘으로 할 수 있습니다: 투명도가 있는 PNG를 투명도가 있는 실제 BMP로 변환하고 리소스를 통해 첨부합니다. ex4 파일 리소스는 압축된 형식으로 저장되기 때문에 ex4 파일의 크기는 png 파일의 크기보다 약간 더 큽니다. 확인했습니다 - bmp를 사용한 ex4 크기의 증가는 png 형식의 동일한 이미지가있는 ex4보다 10-30 % 더 큽니다.

개인적으로 Slavsky가 제안한 변형을 선호합니다. png 파일 자체를 포함하는 별도의 mqh 파일에 별도의 uchar 배열을 넣은 다음 포함을 통해 코드에 삽입하여 거대한 배열이 코드를 복잡하게 만들지 않도록합니다.
또한이 방법의 장점은 리소스의 경우처럼 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로 변환하고 리소스를 통해 첨부합니다.

알파 채널이 있는 BMP는 첨부되지만 표시되지 않으므로 이 옵션은 MT4에서 작동하지 않습니다.

FXSABER #:

마켓은 모든 상품이 두 플랫폼에 중복되어 있음을 보여줍니다. 대부분의 경우 크로스 플랫폼이 아닌 변형을 사용하지 않을 가능성이 높으며 안타깝게도 BMP에 남아 있습니다.

PNG는 이미 크로스 플랫폼이 되었다고 생각합니다. 이미 외부 파일과 함께 작동합니다. 위의 예는 Nikolay의 예시입니다.

알렉산드르 슬라브스키 #:

파일을 배열로 삽입한 다음 이 배열에 액세스할 수 있습니다.

실제로 가능합니다. 저는 직접 놀랐습니다.


캔버스에서 고무성, 투명성을 가진 모든 것을 실현하려고 노력하는 것이 남아 있습니다. 작은 mq4 기적이 준비되었습니다.

물론 이것은 크로스 플랫폼을 위해 수행됩니다. MT4에서는 BMP, MT5에서는 PNG이기 때문입니다. 좋지 않습니다. 모든 것이 PNG여야 합니다.

 
Vitaliy Kuznetsov #:

캔버스에서 고무처럼 투명한 모든 것을 구현하는 것이 남아 있습니다. 작은 mq4 기적이 준비되었습니다.

그래서 모든 것이 이미 준비되었습니다. PNG 라이브러리에서 예제 테스트를 할 수 있습니다. 리소스가 있는 선만

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

줄로 변경합니다.

#include <PNG\iconspng.mqh>

iconspng.mqh 파일에서 png_data[] 배열을 삽입합니다.

MT4에서는 온차트이벤트에서 타이머로 비용이 많이 드는 모든 계산을 출력하는 것이 중요하며, 그렇지 않으면 지연이 심하게 발생한다는 점만 기억해야 합니다. 순전히 MQL4의 헛소리입니다.
이제 지연되지 않는 버전을 삭제하겠습니다.


 
Nikolai Semko #:

지연되지 않는 버전을 업로드하려고 합니다.

네, CPU가 '최고 성능' 모드인 경우에도 랙이 발생하지 않습니다.


파일:
MQL4.ZIP  576 kb
 
Andrey Dik #:

놀랍네요, 이 '삽입' 메뉴가 ME에 언제부터 있었나요? :O

살면서 배우다...

이러한 파일 삽입을 실험한 제 파일 중에서 2019년 11월에 생성된 파일을 발견했습니다. 나는 그것에 더 일찍 관심이있었습니다. 불행히도 이러한 배열에서 이미지 파일이 저장된 스크립트를 찾지 못했습니다.

 
Alexey Viktorov #:

이러한 파일 삽입을 실험한 제 파일 중 2019년 11월에 생성된 파일을 발견했습니다. 그 이전에도 관심이 있었습니다. 안타깝게도 그런 배열에서 이미지 파일이 저장된 스크립트를 찾지 못했습니다.


슈퍼! 편리한 기능입니다.
하지만 내보낸 함수의 선언이 표시되면 ex5를 삽입하는 것이 훨씬 더 편리할 수 있습니다.