Динамическая структура

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Styopa
Сообщения: 40
Зарегистрирован: 30 сен 2004, 19:22
Откуда: Севастополь
Контактная информация:

Привет всем! Вот столкнулся с такой проблемой: в MSDN сказано, что BITMAPINFO - динамическая структура

Код: Выделить всё

typedef struct tagBITMAPINFO { 
  BITMAPINFOHEADER bmiHeader; 
  RGBQUAD          bmiColors[1]; 
} BITMAPINFO, *PBITMAPINFO; 
При этом надо запихнуть в элемент bmiColors три DWORD'а:
the bmiColors member contains three DWORD color masks
Вопрос: как это технически делается?
  • Создать массив char[sizeof(BITMAPINFO) + sizeof(DWORD) * 2] и в него копировать через memcpy;
  • ухитриться выделить кусочек памяти сразу за структурой (ума не приложу :) );
  • или еще как-нибудь?
Посоветуйте, пожалуйста! Заранее спасибо.
В жизни программиста всего три плюса. Из них два - в Си++, а третий - крест на его могиле.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Всё правильно ты делаешь. Только потом полученный указатель на массив преобразуй к типу указатель на BITMAPINFO. После этого можешь инициализировать bmiColors по индексам, как обычный массив.

Код: Выделить всё

// Предположим, у нас в палитре будет 16 цветов...
const int nColors = 16;
BITMAPINFO *pBMI = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(nColors-1)];
for (int i = 0; i < nColors; ++i)
{
 pBMI.bmiColors[i] = <какие-то значения>;
}
Styopa
Сообщения: 40
Зарегистрирован: 30 сен 2004, 19:22
Откуда: Севастополь
Контактная информация:

О, спасибо! :) Твой метод еще интереснее. Весьма благодарен.
В жизни программиста всего три плюса. Из них два - в Си++, а третий - крест на его могиле.
Ответить