forked from rosh/MQL5Book
45 lines
1.8 KiB
MQL5
45 lines
1.8 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| CryptPNG.mq5 |
| |
//| Copyright 2022, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#resource "\\Images\\euro.bmp"
| |
| |
#include "..\..\Include\PRTF.mqh"
| |
#include "..\..\Include\PNG.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
uchar null[]; // empty key
| |
uchar result[]; // receiving 'packed' array
| |
uint data[]; // source pixels
| |
uchar bytes[]; // source bytes
| |
int width, height;
| |
PRTF(ResourceReadImage("::Images\\euro.bmp", data, width, height));
| |
| |
ArrayResize(bytes, ArraySize(data) * 3 + width);
| |
ArrayInitialize(bytes, 0);
| |
int j = 0;
| |
for(int i = 0; i < ArraySize(data); ++i)
| |
{
| |
if(i % width == 0) bytes[j++] = 0; // prepend 0 filter-type byte to each scanline
| |
const uint c = data[i];
| |
// bytes[j++] = (uchar)((c >> 24) & 0xFF); // alpha, for PNG_CTYPE_TRUECOLORALPHA (ARGB)
| |
bytes[j++] = (uchar)((c >> 16) & 0xFF);
| |
bytes[j++] = (uchar)((c >> 8) & 0xFF);
| |
bytes[j++] = (uchar)(c & 0xFF);
| |
}
| |
| |
PRTF(CryptEncode(CRYPT_ARCH_ZIP, bytes, null, result));
| |
| |
int h = PRTF(FileOpen("my.png", FILE_BIN | FILE_WRITE));
| |
| |
PNG::Image image(width, height, result); // by default PNG_CTYPE_TRUECOLOR (RGB)
| |
image.write(h);
| |
| |
FileClose(h);
| |
}
| |
//+------------------------------------------------------------------+
|