bool loadBMP( char *fn ) {
FILE *f;
fopen_s(&f, fn, "rb");
if (!f)
return false;
BITMAPINFOHEADER bmih;
fseek(f, sizeof(BITMAPFILEHEADER), SEEK_SET);
fread(&bmih, 1, sizeof(bmih), f);
_width = bmih.biWidth;
_height = bmih.biHeight;
_bands = bmih.biBitCount / 8;
int scanlength = ((_width * _bands + 3) / 4) * 4;
UCHAR *buf;
if ((buf = (UCHAR *)malloc(scanlength * _height)) == NULL)
return false;
if (data) free(data);
data = (UCHAR*)malloc(_width * _height * _bands);
fseek(f, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (_bands == 1 ? 256 * 4 : 0), SEEK_SET);
fread(buf, 1, scanlength * _height, f);
fclose(f);
for (int y = 0; y < _height; y++)
for (int x = 0; x < _width; x++)
for (int k = 0; k < _bands; k++) {
data[(y * _width + x) * _bands + k] =
buf[(_height - y - 1) * scanlength + x * _bands + _bands - k - 1];
}
free(buf);
return true;
}
Открытие bmp файла
Я знаю, что где-то есть алгоритмы на языке Си с открытием и выводом bmp файла, 16 цветов, но к сожалению я их не нашёл. Если у кого есть, поделитесь, а то разбирать это на паскале ужас неимоверный, особенно для меня.
Заранее благодарю.
Код:
код не претендует на полноту. Будут вопросы, спрашивай
PS для работы с BC3.1 надо немного модифицировать