vazzzzz
Цитата:
Необязательно. Можно создать структуру BITMAPINFO просто скопировав поля из структуры BITMAPINFOHEADER + добавить поле RGBQUAD.
Цитата:
В справке все есть.
Данный код нарисует серый квадрат:
Код: local hWnd = Application.GetWndHandle();
local hDC = tonumber(DLL.CallFunction("User32.dll", "GetDC", hWnd, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));
local nWidth = 100;
local nHeight = 100;
-- описание структуры BITMAPINFO
local BITMAPINFO = MemoryEx.DefineStruct{
DWORD("biSize");
INT ("biWidth");
INT ("biHeight");
WORD ("biPlanes");
WORD ("biBitCount");
DWORD("biCompression");
DWORD("biSizeImage");
INT ("biXPelsPerMeter");
INT ("biYPelsPerMeter");
DWORD("biClrUsed");
DWORD("biClrImportant");
};
-- создаем структуру
local hBITMAPINFO = BITMAPINFO:New();
-- заполняем структуру
hBITMAPINFO.biSize = MemoryEx.StructSize(BITMAPINFO);
hBITMAPINFO.biWidth = nWidth;
hBITMAPINFO.biHeight = -nHeight;
hBITMAPINFO.biPlanes = 1;
hBITMAPINFO.biBitCount = 24;
-- указатель на буфер
local pBITMAPINFO = hBITMAPINFO:GetPointer();
-- выделяем память для массива RGB
pBITS = MemoryEx.Allocate(3*(nWidth * nHeight));
-- заполняем сервым цветом (192)
MemoryEx.Fill(pBITS, MemoryEx.Size(pBITS), 192, MEMEX_BYTE);
local sRes = DLL.CallFunction("gdi32.dll", "SetDIBitsToDevice", hDC..", 10, 10, "..nWidth..", "..nHeight..", 0, 0, 0, "..nHeight..", "..pBITS..", "..pBITMAPINFO..", 0", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)
MemoryEx.Free(pBITS);
hBITMAPINFO:Free();
Dialog.Message("Debug", sRes, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Цитата:
и в данном случае нужно было создавать структуру в структуре
Необязательно. Можно создать структуру BITMAPINFO просто скопировав поля из структуры BITMAPINFOHEADER + добавить поле RGBQUAD.
Цитата:
UNION какой тип данных определяет?
В справке все есть.
Данный код нарисует серый квадрат:
Код: local hWnd = Application.GetWndHandle();
local hDC = tonumber(DLL.CallFunction("User32.dll", "GetDC", hWnd, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));
local nWidth = 100;
local nHeight = 100;
-- описание структуры BITMAPINFO
local BITMAPINFO = MemoryEx.DefineStruct{
DWORD("biSize");
INT ("biWidth");
INT ("biHeight");
WORD ("biPlanes");
WORD ("biBitCount");
DWORD("biCompression");
DWORD("biSizeImage");
INT ("biXPelsPerMeter");
INT ("biYPelsPerMeter");
DWORD("biClrUsed");
DWORD("biClrImportant");
};
-- создаем структуру
local hBITMAPINFO = BITMAPINFO:New();
-- заполняем структуру
hBITMAPINFO.biSize = MemoryEx.StructSize(BITMAPINFO);
hBITMAPINFO.biWidth = nWidth;
hBITMAPINFO.biHeight = -nHeight;
hBITMAPINFO.biPlanes = 1;
hBITMAPINFO.biBitCount = 24;
-- указатель на буфер
local pBITMAPINFO = hBITMAPINFO:GetPointer();
-- выделяем память для массива RGB
pBITS = MemoryEx.Allocate(3*(nWidth * nHeight));
-- заполняем сервым цветом (192)
MemoryEx.Fill(pBITS, MemoryEx.Size(pBITS), 192, MEMEX_BYTE);
local sRes = DLL.CallFunction("gdi32.dll", "SetDIBitsToDevice", hDC..", 10, 10, "..nWidth..", "..nHeight..", 0, 0, 0, "..nHeight..", "..pBITS..", "..pBITMAPINFO..", 0", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)
MemoryEx.Free(pBITS);
hBITMAPINFO:Free();
Dialog.Message("Debug", sRes, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);