Шаг 144 - Дальше Читаем растр с диска

Но то, что мы сделали в прошлый раз еще не все. Нам теперь надо завести несколько переменных и вычислить их положение в растре.

class CDib  
{
	.....
	LPBITMAPINFOHEADER lpHeader;
	RGBQUAD* lpRGB;
	BYTE* lpBMP;
	.......
};
А теперь код для вычисления этих переменных.
void CDib::LoadFile(CString filename)
{
	........
		//  NEW !!!
		lpHeader=(LPBITMAPINFOHEADER)ptrBmp;
		lpRGB = (RGBQUAD*)(ptrBmp+lpHeader->biSize); 
		int num=GetNumColor();
		DWORD sizetable=num*sizeof(RGBQUAD);
		lpBMP=ptrBmp+lpHeader->biSize+sizetable; 
	}
}
Мы объявили процедуру для вычисления количества цветов.
class CDib  
{
	.....
	UINT GetNumColor();

};
И её реализация.
UINT CDib::GetNumColor()
{
	if ((lpHeader->biClrUsed == 0 ) && (lpHeader->biClrUsed <9))
		return (1biClrUsed; 
}

Вот давайте посмотрим на наши деяния. Мы объявили новую переменную, как указатель на структуру информации о растре. Сразу за ней начинается таблица цветов. Указатель на неё мы и вычисляем. Теперь надо вычислить размер таблицы. Для этого нужно количество цветов. Если мы умножим количество цветов на размер одной записи и сложим с началом записей, то получим указатель уже на конкретные данные.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 11.03.2000