Я загружаю в буфер проекцию витмара (.BMP), то есть это даже не упакованый DIB(файл вместе с заголовком - BITMAPFILEHEADER).
Как прще всего получить битмам ?
Или более точно, как его правильно загрузить, и получить указатель на саму картинку?
На вопрос, нафига такая хрень.
Я читаю файл(не .BMP), который содержит в себе этот массив. Конечно можно скинуть в темп и загрузить. Но желательно сразу считать в буфер создать битмап и освободить память(думается мне так быстрее будет, файлов много).
Посдн чего создаю в памяти текстуру - для open GL.( нужен указатель на данные)
Как я это пытаюсь сделать.
/*для проверки скидываем файл на диск - все ОК*/
FILE *writePtr;
writePtr=fopen("St.bmp","wb");
fwrite(Sm_pMaterials[i].byf,sizeof(byte),Sm_pMaterials[i].imageSize ,writePtr);
fclose (writePtr);
// пытаемся добраться до массива цветов
BITMAPFILEHEADER *pHean; // объявили структуры
BITMAPINFOHEADER * hean;
RGBQUAD *rg;
pHean= (BITMAPFILEHEADER*)Sm_pMaterials[i].byf;// приводим наш буфер к указателю
Sm_pMaterials[i].byf+= sizeof (BITMAPFILEHEADER);// смещаемся ОК
hean=(BITMAPINFOHEADER*)Sm_pMaterials[i].byf;
Sm_pMaterials[i].byf+= sizeof (BITMAPINFOHEADER);// смещаемся ОК
rg=(RGBQUAD*)Sm_pMaterials[i].byf;
Sm_pMaterials[i].byf+= sizeof (RGBQUAD)*hean->biClrUsed ; //смещаемся не ОК!!!
/* Тыкаем в никуда*/
//Причем не на всех картинках????? Иногда попадаю:)))
Структура BMP.
BITMAPFILEHEADER - заголовок файла
BITMAPINFOHEADER - данные о файле (высота, ширина, размер и т.д.)
RGBQUAD - цветовая палитра
Color-index array - оно нам и нужно.
bitInfoHdr->biClrUsed - эта величина содержит количество структур RGBQUAD.
Аналогично bitFileHdr->bfOffBits - показывет смещение от начала файла до Color-index array.