bitmap и WinAPI

Модератор: Злобный

Ответить
Аватара пользователя
sadman
Завсегдатай
Сообщения: 2001
Зарегистрирован: Чт дек 15, 2005 23:46
Откуда: с ботаники
Контактная информация:

bitmap и WinAPI

Сообщение sadman »

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

HANDLE hBitmap;

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

hBitmap = GetClipboardData(CF_BITMAP);
CloseClipboard();

подскажите пожалуйста как это можно реализовать.
Аватара пользователя
keisik
Юзер
Сообщения: 197
Зарегистрирован: Вс фев 26, 2006 23:29

Сообщение keisik »

1. Получить сами данные (GetDIBits)
2. Записать в файл BMP-Header
3. Записать в файл данные, построчно выровненные по 4-х байтной границе.
Аватара пользователя
sadman
Завсегдатай
Сообщения: 2001
Зарегистрирован: Чт дек 15, 2005 23:46
Откуда: с ботаники
Контактная информация:

Сообщение sadman »

расскажи, плз, по-подробней о втором и третьем пунктах :kettle:
Аватара пользователя
keisik
Юзер
Сообщения: 197
Зарегистрирован: Вс фев 26, 2006 23:29

Сообщение keisik »

Файл BMP состоит из заголовка (BMP Header) и собственно данных. В заголовке содержатся метаданные (размер, глубина цвета, ... и смещение, т.е. позиция где собственно данные начинаются). Сами данные - это идущие друг за другом точки, цвет которых представлен в формате RGB (в простейшем случае). Единственная закавыка - все линии должны быть выровнены по DWORD-овской границе ("линии" выражение условное, т.к. данные физически не идут по линиям, а одним потоком), поэтому через определённые интервалы (в конце "логических" линий, по ширине изображения) возможно придётся вставлять дополнительные "пустышки". Вроде так, если мой склероз мне не изменяет.
Заголовки - стандартные структуры из WinAPI, BITMAPFILEHEADER кажись. Там, насколько я помню, всё просто - заполняешь эти структуры (BITMAPINFO тоже ещё должна быть), и прямиком их и пишешь в файл (только смещение подправить надо), а потом пишешь данные построчно, выравнивая по DWORD-у.
А вообще, MSDN спасёт отца русской демократии. Думаю, если порыться вокруг этих структурок и функций, где-нибудь там и примерчик найдётся.
Аватара пользователя
sadman
Завсегдатай
Сообщения: 2001
Зарегистрирован: Чт дек 15, 2005 23:46
Откуда: с ботаники
Контактная информация:

Сообщение sadman »

спасибо за подробную информацию :)
Аватара пользователя
keisik
Юзер
Сообщения: 197
Зарегистрирован: Вс фев 26, 2006 23:29

Сообщение keisik »

Не за что. Всегда рад помочь, чем могу :)
Ответить

Вернуться в «Программирование»