class CMyImage
Класс для работы с изображениями на графиках MQL5. Обеспечивает загрузку, отображение, масштабирование и позиционирование растровых изображений.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «image.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека предоставляет класс CMyImage для размещения и управления растровыми изображениями на графиках платформы MQL5. Класс использует инфраструктуру канваса и графических объектов для отрисовки BMP-изображений, загружаемых из ресурсов.
Основные возможности включают загрузку изображений, их масштабирование с интерполяцией, позиционирование относительно краёв графика и автоматическую очистку ресурсов при удалении.
Класс подходит для создания информационных панелей и визуальных элементов на торговых графиках, обеспечивая гибкое управление отображением изображений.
Классов: 1 · методов: 10 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0
class CMyImage
Класс для работы с изображениями на графиках MQL5. Обеспечивает загрузку, отображение, масштабирование и позиционирование растровых изображений.
void ArrToCanvas()
Перенос пиксельных данных из массива BMP на холст канваса с учётом прозрачности.
CMyImage()
Конструктор класса. Инициализирует начальные размеры холста нулями.
bool Load(const long chart_id,const string name,double x,double y,bool bBackGround)
Загружает растровое изображение из ресурсов, создаёт канвас и привязывает его к объекту графика.
void Center(int min,int max)
Центрирует изображение на графике с ограничением размеров в заданном диапазоне.
void RightBottom(double dmn)
Позиционирует изображение в правом нижнем углу графика с заданным коэффициентом смещения.
void LeftTop(int min,int max)
Позиционирует изображение в левом верхнем углу графика с ограничением размеров.
void Move(int x,int y)
Перемещает изображение в указанные координаты на графике.
~CMyImage()
Деструктор класса. Освобождает ресурсы канваса при удалении объекта.
void OnDeinit()
Вызывается при деинициализации. Освобождает ресурсы канваса.
void ResizeImage(double NewWidth)
Изменяет ширину изображения с интерполяцией пиксельных данных.
int ChartWidth()
Возвращает ширину графика в пикселях.
int ChartHeight()
Возвращает высоту графика в пикселях.
#property version "1.00"
#define protected public
#include <sovetnikovNET\Canvas.mqh>
#include <ChartObjects\ChartObjectsBmpControls.mqh>
#undef protected
#define _ceil(x) (x-(int)x>0)?(int)x+1:(int)x
#define _round(x) (x>0)?(int)(x+0.5):(int)(x-0.5)
#define _floor(x) (x>0)?(int)x:((int)x-x>0)?(int)x-1:(int)x
union rgb
{
uchar argb[4];
uint clr;
};
bool ArraySwap(
uint& array1[], // первый массив
uint& array2[] // второй массив
)
{
int isize=MathMin(ArraySize(array1),ArraySize(array2));
for(int i=0; i<isize; i++)
{
uint tmp=array1[i];
array1[i]=array2[i];
array2[i]=tmp;
}
return true;
}
class CMyImage
{
public:
int m_lastW,m_lastH;
CCanvas canvasMain;
uint width_bmp,height_bmp;
uint BMP[];
string CanvName;
double X,Y;
int SizeArr;
void ArrToCanvas()
{
if(tr>=1)
ArrayCopy(canvasMain.m_pixels,BMP);
else
for(int i=0; i<SizeArr; i++)
canvasMain.m_pixels[i]=(uchar(double(BMP[i]>>24)*tr)<<24)|BMP[i]&0x00FFFFFF;
ArrayCopy(BMP,canvasMain.m_pixels);
}
double tr;
rgb col;
CChartObjectBmpLabel m_img;
long m_chart_id;
public:
CMyImage() {m_lastW=0; m_lastH=0;}
bool Load(const long chart_id,const string name,double x,double y,bool bBackGround=true)
{
X=x;
Y=y;
tr=1;
m_chart_id=chart_id;
m_lastW=0;
m_lastH=0;
width_bmp=0;
height_bmp=0;
if(!ResourceReadImage(name,BMP,width_bmp,height_bmp))
{
Print("Error read resource: ",GetLastError()); // переносим bmp файл в массив
return false;
}
ResourceFree(name);
SizeArr=(int)(width_bmp*height_bmp);
CanvName="Image"+string(GetTickCount()+MathRand());
if(!canvasMain.CreateBitmapLabel(0,0,CanvName,(int)X,(int)Y,width_bmp,height_bmp,COLOR_FORMAT_ARGB_NORMALIZE)) // create canvas with the size of the current window
Print("Error creating canvas: ",GetLastError());
m_img.Attach(m_chart_id,CanvName,0,2);
m_img.Background(bBackGround);
m_img.SetInteger(OBJPROP_ANCHOR,ANCHOR_CENTER);
m_img.SetInteger(OBJPROP_TIMEFRAMES,OBJ_NO_PERIODS);
m_img.SetInteger(OBJPROP_ZORDER,-100);
ArrToCanvas();
canvasMain.Update();
return true;
}
virtual void Center(int min,int max)
{
if(m_lastW!=ChartWidth() || m_lastH!=ChartHeight())
{
m_lastW=ChartWidth();
m_lastH=ChartHeight();
int w=MathMin(m_lastW,m_lastH)-20;
if(w<min)
w=min;
if(w>max)
w=max;
int x=m_lastW/2;
int y=m_lastH/2;
ResizeImage(w);
Move(x,y);
m_img.SetInteger(OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
canvasMain.Update();
}
}
virtual void RightBottom(double dmn)
{
if(m_lastW!=ChartWidth() || m_lastH!=ChartHeight())
{
m_lastW=ChartWidth();
m_lastH=ChartHeight();
int w=(int)(m_lastH*dmn);
int x=m_lastW-w-20;
int y=m_lastH-w-20;
if(x<0)
x=0;
if(y<0)
y=0;
ResizeImage(w);
Move(x,y);
m_img.SetInteger(OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
canvasMain.Update();
}
}
virtual void LeftTop(int min,iПоказано первые 50% кода (символов: 4252)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.