Будем смотреть телевизор? ;)

 

Основная цель этой разработки познание возможностей программирования.

Ну и опыту поднабраться чуток... )))

*

Ви думаете шо это квадрат Малевича?
Так скажу вам шо ви таки ошибаетесь...

;)))



*

Основой представленных далее двух скриптов служит некая конструкция под условным названием "растр".

for(V=0; V<256; V++)
{
   for(H=0; H<256; H++)
   {
   cv=0; // тут задаём цвет пикселя
   ObjectCreate("foto_"+V+"_"+H,OBJ_LABEL, 0, 0, 0);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_BACK,1);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_CORNER,0);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_XDISTANCE,shH+H);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_YDISTANCE,shV+V);
   ObjectSetText("foto_"+V+"_"+H, ".", 6, "Times New Roman", cv);
   }
}

Которая из обьекта "Лейбл" формирует матрицу.

H и V соответственно вертикальная и горизонтальная развертка.

"." (точка) это "пиксел" матрицы...

Задавая цвет которому на каждой итерации можно отобразить хоть фотографию любимого президента.

*

Но это пока лишь в теории. Ибо не нашел инструментария как "отпикселить" исходный файл картинки.

Поэтому основная масса работы производилась с данными которые читаются из обычного *.csv либо текстового файла. Вар. №1.

Однако вариант №2, который для работы с файлом более интересен... И пока не реализован до логического завершения!

Вот что есть на текущий момент:

// ФОТО.mq4 |
#property show_inputs
//---
#import "user32.dll"
   int GetDC(int hwnd);
   int ReleaseDC(int hwnd,int hdc);
#import "gdi32.dll"
 int GetPixel(int hdc,int x,int y);
#import

//+------------------------------------------------------------------+
int start()
  { int i, H, V, shH=50, shV=15, header;
  double hgh;
  color r, g, b, cv=Red;
DelObjPref("foto_");
//---
int   hwnd=WindowHandle(Symbol(),Period());
int   hdc=GetDC(hwnd);

//if(header<1) {Print("Файл не найден, ошибка ", GetLastError()); return(false);}

//---
for(V=0; V<256; V++)
{
   for(H=0; H<256; H++)
   {
   cv=GetPixel(hdc,H,V); 
   ObjectCreate("foto_"+V+"_"+H,OBJ_LABEL, 0, 0, 0);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_BACK,1);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_CORNER,0);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_XDISTANCE,shH+H);
   ObjectSet("foto_"+V+"_"+H,OBJPROP_YDISTANCE,shV+V);
   ObjectSetText("foto_"+V+"_"+H, ".", 6, "Times New Roman", cv);
   }
}

ReleaseDC(hwnd,hdc);

return(0);
}
//-----------------------------------------------------------------
void DelObjPref(string str) 
{
string tn; int lens=StringLen(str);
for(int cnt=ObjectsTotal()-1;cnt>=0;cnt--) 
{
tn=ObjectName(cnt);
if(StringSubstr(tn,0,lens)==str) {ObjectDelete(tn);}
}
WindowRedraw();
return;
}
//------------------------------------------------------------

и выступает как "копировщик" текущего окна.

(поэтому не думайте шо ви напились и у вас уже двоится в глазах :)))


ЗЫ: каги остались на копии, а так он убран для лучшего вида

ЗЫ2: вариант №1, который "текстовый" чуть позже выложу вместе с файлом данных.

ЗЫ3: отдельное спасибо участникам темы https://www.mql5.com/en/code/8973

 
kombat >>:

*

Ибо не нашел инструментария как "отпикселить" исходный файл картинки.

Утилита bmp2c не подойдёт? Перевод картинки в 2-мерный массив.

Файлы:
bmp2c.zip  747 kb
 
Parabellum >>:

Утилита bmp2c не подойдёт? Перевод картинки в 2-мерный массив.

Да! спасибо!

Стало гораздо легче дышать... ;)

Точнее откуда плясать, хоть и "текстовый", №1 вариант и просто игрушка.

Но как всегда что-то...

Маленько поправить исходный результирующий текст не проблема,

как и не проблема прочитать, а вот как забить в понимаемый колор это представление 0xd636

всю голову сломал и справку погрыз... чуток... с правого угла... ;)))

*

Читаю текст простой функцией:

string ReadTxtNun(int handle, int num)
{
string txt; int i, chk;
for(i=0; i<num; i++)
   {
   if(i+1==num) txt=FileReadString(handle);
   }
return(txt);
}

и в цикле пытаюсь назначить цвет:

for(V=0; V<256; V++)
{
   for(H=0; H<256; H++)
   {
   cv=StrToInteger(ReadTxtNun(header,H+V));
   ObjectCreate("text_"+V+"_"+H,OBJ_LABEL, 0, 0, 0);
   ObjectSet("text_"+V+"_"+H,OBJPROP_BACK,1);
   ObjectSet("text_"+V+"_"+H,OBJPROP_CORNER,0);
   ObjectSet("text_"+V+"_"+H,OBJPROP_XDISTANCE,shH+H);
   ObjectSet("text_"+V+"_"+H,OBJPROP_YDISTANCE,shV+V);
   ObjectSetText("text_"+V+"_"+H, ".", 6, "Times New Roman", cv);
   }
}

однако 0.

StrToInteger(); там как одна из попыток, так что не пинайте.

Ибо считал что:

// целочисленные представления

0xFFFFFF // белый

16777215 // белый

0x008000 // зеленый

32768 // зеленый

как раз мой случай, а неявное преобразование сделает своё дело...

 
Красава) тоже давненько хотелось сделать какую нибудь простенькую игрушку под mql типа гонок ;)
 

Вот что совсем непонятно...

програмка создаёт таки одномерый массив???

#define x_putin13_bmp 256;//width of the picture
#define y_putin13_bmp 256;//height of the picture
static const unsigned short pic_putin13_bmp[] = {0xd676,  ...}
 

а зачем лейблы если всё равно апи во всю используется ?

//+------------------------------------------------------------------+
//|                                                     PaintBMP.mq4 |
//|                                                           MaStak |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "MaStak"
#property show_inputs
//---------------------------------------
extern string FileName="C:\WINDOWS\winnt.bmp";
extern int    X=500;
extern int    Y=350;
//---------------------------------------
#define IMAGE_BITMAP        0
#define LR_LOADFROMFILE     16
#define SRCCOPY             13369376

#import "user32.dll"
int GetAncestor(int hWnd, int Flags);
int LoadImageA (int hInst , string lpsz , int dwImageType,int dwDesiredWidth,int dwDesiredHeight, int dwFlags);
int GetWindowDC (int hWnd);
int ReleaseDC (int hWnd , int hDC);
#import "gdi32.dll"
int DeleteObject (int hObject);
int BitBlt (int hDestDC,int x , int y, int nWidth, int nHeight, int hSrcDC,int xSrc,int ySrc,int dwRop);
int CreateCompatibleDC (int hDC);
int DeleteDC (int hDC);
int SelectObject (int hDC,int hObject);
#import
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){
int hDC, hDW, hBitmap, hMT;
hMT=GetAncestor(WindowHandle(Symbol(),Period()),2);
//
hBitmap = LoadImageA(0, FileName, IMAGE_BITMAP, 320, 200, LR_LOADFROMFILE);
if(hBitmap == 0) return(0);

while(!IsStopped()){
hDW = GetWindowDC(hMT);             // Контекст приёмника
hDC = CreateCompatibleDC(hDW);      // Контекст источника совместимый с приёмником
SelectObject (hDC, hBitmap);        // Выбрали картинку в контекст
BitBlt (hDW, X, Y, 320, 200, hDC, 0, 0, SRCCOPY); // Скопировали
DeleteDC (hDC);                     // Удалили контекст источника
ReleaseDC (hMT, hDW);               // Освободили контекст приёмника
Sleep(1000);}

DeleteObject (hBitmap);             // Удалили рисунок из памяти

return(0);}
//+------------------------------------------------------------------+
 
MaStak >>:

а зачем лейблы если всё равно апи во всю используется ?

Ну выше написал: для тренировки! Полезность потом обдумаю.

*

Потому что нужен инструмент ДЛЯ графика и НА графике...

Ещё к тому отработать нюансы типа: считать => обработать (при необходимости) => вывести

А так-же создание "обьектов" из обьектов...

*

Тем не менее за скрипт спасибо!

 
kombat писал(а) >>

Ну выше написал: для тренировки! Полезность потом обдумаю.

*

Потому что нужен инструмент ДЛЯ графика и НА графике...

Ещё к тому отработать нюансы типа: считать => обработать (при необходимости) => вывести

А так-же создание "обьектов" из обьектов...

*

Тем не менее за скрипт спасибо!

Я думал с ОАНДЫ собираешься картинки перетаскивать.

 

Мда...

Что-то ВВП зашифрованный какой-то получается.

или утилитка создаёт массив по своим понятиям...

))) Пикасссо отдыхает.


*

Попутно выяснил что массив и так можно заполнять:

color pic_bmp[] = {0xd4ccb7, 0xd4ccb7, 0xd4ccb7, 
0xd4ccb7, 0xd4ccb7, 0xd4ccb7, 0xd4ccb7, 0xd4ccb7, 0xd2cab5, 0xd4ccb7, 0xd4ccb7, 0xd3cbb9, 
0xd3cbb6, 0xd3cbb5, 0xd2cab3, ...};

вовремя, а то уж было ексель снарядил в кавычки обувать. "0xd1c9b4",

 
Vinin >>:

Я думал с ОАНДЫ собираешься картинки перетаскивать.

Для етого уже есть навроде как инструменты.

 

Однако здравствуйте! (с)

;)

Вот и уважаемый ВВП приобщился к нашему тяжкому трейдерскому делу.

Зорко всматривается в будущее и чутко прислушивается к прошлому...

(правда робко так, сжато, но тем не менее :)))


как это получилось пока не готов ответить, скажу лишь что это по вар.№2 чтением картики попиксельно средствами апи.

Причина обращения: