Страница 1 из 1

bitmap и WinAPI

Добавлено: Вс фев 19, 2006 20:03
sadman
вопрос по WinAPI:
хочу, получив хэндл битмапа находящегося в буфер, сохранить данный битмап где-нибудь на физичесском носителе. получаю хэндл битмапа так:

HANDLE hBitmap;

................

hBitmap = GetClipboardData(CF_BITMAP);
CloseClipboard();

подскажите пожалуйста как это можно реализовать.

Добавлено: Вс фев 26, 2006 23:33
keisik
1. Получить сами данные (GetDIBits)
2. Записать в файл BMP-Header
3. Записать в файл данные, построчно выровненные по 4-х байтной границе.

Добавлено: Вт фев 28, 2006 18:13
sadman
расскажи, плз, по-подробней о втором и третьем пунктах :kettle:

Добавлено: Ср мар 01, 2006 00:21
keisik
Файл BMP состоит из заголовка (BMP Header) и собственно данных. В заголовке содержатся метаданные (размер, глубина цвета, ... и смещение, т.е. позиция где собственно данные начинаются). Сами данные - это идущие друг за другом точки, цвет которых представлен в формате RGB (в простейшем случае). Единственная закавыка - все линии должны быть выровнены по DWORD-овской границе ("линии" выражение условное, т.к. данные физически не идут по линиям, а одним потоком), поэтому через определённые интервалы (в конце "логических" линий, по ширине изображения) возможно придётся вставлять дополнительные "пустышки". Вроде так, если мой склероз мне не изменяет.
Заголовки - стандартные структуры из WinAPI, BITMAPFILEHEADER кажись. Там, насколько я помню, всё просто - заполняешь эти структуры (BITMAPINFO тоже ещё должна быть), и прямиком их и пишешь в файл (только смещение подправить надо), а потом пишешь данные построчно, выравнивая по DWORD-у.
А вообще, MSDN спасёт отца русской демократии. Думаю, если порыться вокруг этих структурок и функций, где-нибудь там и примерчик найдётся.

Добавлено: Ср мар 01, 2006 16:32
sadman
спасибо за подробную информацию :)

Добавлено: Ср мар 01, 2006 22:09
keisik
Не за что. Всегда рад помочь, чем могу :)