Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"Скриншот"...

2.4K
09 ноября 2004 года
nihil
56 / / 28.02.2004
Мне надо просто получить биты картинки с экрана... я пробовал так:

// используемые переменные
HDC hDC, hdcDisplay;
BITMAP Bitmap;
char** MyBits;

// получаем контекст экрана
hdcDisplay = CreateDC("DISPLAY", 0L, 0L, 0L);

// устанавливаем поле "размер" структуры BITMAPINFOHEADER в стурктуре BITMAPINFO :)
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

/* устанавливали размер для следующей функции. По идее, т.е. как написано в MSDN, если 5й параметр (указатель на буфер, где буду лежать битики) передать как NULL, то функция просто заполнит инфой о картинке структуру bmi. */
int nScanLines = GetDIBits(hdcDisplay, (HBITMAP)hBitmap, 0, 768, NULL, &bmi, DIB_RGB_COLORS);

// bmi заполнена нудными параметрами... если точнее "первыми" 6 + размер.
// След. функция опять таки по идее должна MyBits сделать указателем на указатель на битики картинки
// и вернуть указатель на DIB. Вместо этого я получаю NULL и ошибку - неверно задан параметр...
hBitmap = CreateDIBSection(hAnotherDC, &bmi, DIB_RGB_COLORS, (void**)MyBits, NULL, 0);

ЗЫ У меня есть исходники с использованием MFC. Но в том то и дело, что использовать MFC я не могу...
Также пробовал GetDIBits с указателем на буфер - фозвращало правильное количество скопированных строк (scanline), но буфер как был 0 забит, так и оставался...

Может у кого есть другой вариант решения этой задачи?

Заранее благодарен
356
28 декабря 2004 года
molnij
159 / / 20.06.2000
крайне нетривиальная задача между прочим :( почему-то напрямую получить нужный указатель в памяти, где живет выводимый массив нельзя (хотя почему, понятно - не наша память - нефиг соваться)
но можно немножко обмануть винапи.

HDC DC;
LPVOID vsp;
DC=GetDC(hwnd);
//создание битмапа
bmpDC=CreateCompatibleDC(DC);//создаем совместимый контекст
bmp=CreateDIBSection(DC,&bmpInfo,DIB_RGB_COLORS,&vsp,NULL,0); //создаем битмап
pBmp=(COLORREF *)vsp;//приводим указатель
SelectObject(bmpDC,bmp);//выбираем в контекст битмап
ReleaseDC(hwnd,DC);

в результате получаем контекст bmpDC, битмап bmp и pBmp - указатель на область памяти, где живет все содержимое битмапа. теперь, копируя из нужного контекста в bmpDC нужный кусок - получим их через указатель pBmp. Возможна и обратная операция - копирование из bmpDC в какой-то другой DC. Насколько я понимаю, mfc реализовано примерно так же, но все нужные функции сведены в класс.
в приведенном куске опущена инициализация структуры bmpInfo - там вроде бы все достаточно понятно, хотя и муторно
2.4K
15 февраля 2005 года
nihil
56 / / 28.02.2004
Цитата:
Originally posted by molnij
крайне нетривиальная задача между прочим :( почему-то напрямую получить нужный указатель в памяти, где живет выводимый массив нельзя (хотя почему, понятно - не наша память - нефиг соваться)
но можно немножко обмануть винапи.

HDC DC;
LPVOID vsp;
DC=GetDC(hwnd);
//создание битмапа
bmpDC=CreateCompatibleDC(DC);//создаем совместимый контекст
bmp=CreateDIBSection(DC,&bmpInfo,DIB_RGB_COLORS,&vsp,NULL,0); //создаем битмап
pBmp=(COLORREF *)vsp;//приводим указатель
SelectObject(bmpDC,bmp);//выбираем в контекст битмап
ReleaseDC(hwnd,DC);
...



ну примерно так я тогда и решил (инета долго не было - не мог прочитать твое сообщение :)))
все равно спасибо :)

тока я не создавал DIB секцию... я все старыми функциями сделал... если интересно могу прислать исходник...

16K
27 февраля 2006 года
catap
1 / / 25.02.2006
Цитата:
Originally posted by nihil
ну примерно так я тогда и решил (инета долго не было - не мог прочитать твое сообщение :)))
все равно спасибо :)

тока я не создавал DIB секцию... я все старыми функциями сделал... если интересно могу прислать исходник...



Достаточно интересно, если есть возможность то на мыло (catap@catap.ru)

2.9K
01 марта 2006 года
RYM
109 / / 06.06.2005
Если не лень скинь пожалуйста еще и мне:)
ry_<собака>tut<dot>by
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог