powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как сохранить экран в файл?
13 сообщений из 13, страница 1 из 1
Как сохранить экран в файл?
    #32674569
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Как сохранить экран в файл?

Заранее благодарен.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32674650
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetDC(0) - контекст экрана, дальше читаем Win API.
Вот пример, для тех, кто не умеет пользоваться поиском
http://gethelp.devx.com/techtips/pb_pro/10min/10min0899.asp
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32677851
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под Windows Me всё работает, но под Windows 2000 нет.
CreateCompatibleDC возвращает 0.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32678228
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторCreateCompatibleDC возвращает 0.
Если перебить определение функций руками, то у меня заработало...
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32680507
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Если перебить определение функций руками, то у меня заработало...
Когда набирал определение функции заново, то смотрел в MSDN, и поэтому набрал правильно. На самом деле там на странице ошибка, надо в определениях функций писать не uint, а ulong, т.к. HDC занимает несколько больше 16 бит.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32680748
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, уже тоже об этом подумал.
Всё заработало.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685182
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь теперь сохранить изображение в файл.
Пишу.

Long ll_DC, ll_DestDC,ll_BMP,l1
Uint i1
st_bitmapinfo pbinf

ll_DC = GetDC(0)
ll_DestDC = CreateCompatibleDC(ll_DC)
ll_BMP = CreateCompatibleBitmap(ll_DC, li_W, li_H )
-- Всё в порядке
-- Далее пытаюсь получить информацию о картинке
SetNull(l1)
i1 = GetDIBits(ll_DC, ll_BMP,0,0, l1, pbinf, 0)

i1 = 0 - т.е. структура не заполнилась. В чём ошибка?

...
DeleteDC
ReleaseDC


Function Int GetDIBits(ULong hdc, ULong hbmp,Uint uStartScan, Uint cScanLines, Long lpvBits, ref ST_BITMAPINFO lpbi, UINT uUsage )Library "gdi32.dll"

Windows 2000, Pb 9.0.1 Build 6533
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685225
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут и ошибка:
umalovi1 = GetDIBits(ll_DC, ll_BMP,0,0, l1, pbinf, 0)

MSDNint GetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // array for bitmap bits
LPBITMAPINFO lpbi, // bitmap data buffer
UINT uUsage // RGB or palette index
);
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685337
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не помогает.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685482
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркGetDC(0) - контекст экрана, дальше читаем Win API.
Вот пример, для тех, кто не умеет пользоваться поиском
http://gethelp.devx.com/techtips/pb_pro/10min/10min0899.asp

А я получаю постоянно черный квадрат вместо рисунка. Прямо Малевич какой-то! :)
Сделал все, как написано в ссылке + поменял uint на ulong.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685640
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменять нужно не только в GetDc, но и где используем его.

Function Boolean BitBlt( Ulong hDestDC, int ix, int iy, int iw, int ih, Ulong hSourceDC, int idx, int idy, long oper ) Library "gdi32.dll"
Function Ulong SelectObject(Ulong Hdc, Ulong Hobj) Library"gdi32.dll"
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32685746
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
umalovПоменять нужно не только в GetDc, но и где используем его.

Function Boolean BitBlt( Ulong hDestDC, int ix, int iy, int iw, int ih, Ulong hSourceDC, int idx, int idy, long oper ) Library "gdi32.dll"
Function Ulong SelectObject(Ulong Hdc, Ulong Hobj) Library"gdi32.dll"
Спасибо. Работает.
...
Рейтинг: 0 / 0
Как сохранить экран в файл?
    #32689145
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец добрался до сохранения файла.

Пишу далее

lpBits = GlobalAlloc(0,pbinf.bmiheader.biSizeImage)
l1 = GetDIBits(ll_DestDC, ll_BMP,0,li_H,lpBits, pbinf, 0)
//Create file
pszFile = '1.bmp'
SetNull(s33)
SetNull(iii1)
// Создадим файл
hf = CreateFileA(pszFile, 2147483648 + 1073741824, 0,s33, 2, 128, iii1);
// Заголовок файла st_BITMAPFILEHEADER
hdr.bfType = 19778
hdr.bfSize = 14 + pbinf.bmiheader.biSize + pbinf.bmiheader.biClrUsed * 4 + pbinf.bmiheader.biSizeImage
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = 14 + pbinf.bmiheader.biSize + pbinf.bmiheader.biClrUsed * 4
//
SetNull(s33)
b2 = WriteFile(hf, hdr,14, l32,s33)
// Заголовок файла st_BITMAPINFOHEADER
pbih = pbinf.bmiheader
b2 = WriteFile(hf, pbih,40, l32,s33)
//
dwTotal = pbih.biSizeImage
cb = pbih.biSizeImage;
hp = lpBits;
do while (cb > 32765) //32765
b2 = WriteFile(hf,hp, 32765,l32,s33)
cb = cb - 32765;
hp = hp + 32765;
loop
b2 = WriteFile(hf, hp, cb,l32,s33)

//Закроем файл и освободим память
CloseHandle(hf)
GlobalFree(lpBits)

В файле только шум.
Понимаю, что дело с записью данных, конкретно, наверное, с указателем на память с картинкой. Т.к. при просмотре bmp файла вижу, что там вовсе не то - иногда попадает даже код программы.

Никак не могу разобраться.
Кто знает - помогите, пожалуйста.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как сохранить экран в файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]