Добрый вечер!Кто может мне объяснить где моя ошибка...Если использую такой подход:
int LoadBitmapFile(BITMAP_FILE_PTR bitmap, char *filename)
{
        FILE *file;
        if((file = fopen(filename, "rb")) == NULL)
                return 0;
        fread(&bitmap->bfh, sizeof(BITMAPFILEHEADER), 1, file);
        if(bitmap->bfh.bfType != BITMAP_ID)
        {
                fclose(file);
                return 0;
        }
        fread(&bitmap->bih, sizeof(BITMAPINFOHEADER), 1, file);
        fseek(file, -int(bitmap->bih.biSizeImage), SEEK_END);
        if(bitmap->bih.biBitCount == 24)
        {
                if(bitmap->buffer)
                        delete bitmap->buffer;
                if(!(bitmap->buffer = new UCHAR[bitmap->bih.biSizeImage]))
                {
                        fclose(file);
                        return 0;
                }
                fread(bitmap->buffer, sizeof(bitmap->bih.biSizeImage), 1, file);
        }
        else
        {
                fclose(file);
                return 0;
        }
        fclose(file);
        return 1;
}
то на экран выводится серый прямоугольник по размерам картинки...
А если использую такой подход:
int LoadBitmapFile(BITMAP_FILE_PTR bitmap, char *filename)
{
        int file;
        OFSTRUCT file_data;       
        
        if ((file = OpenFile(filename,&file_data,OF_READ))==-1)
           return 0;
        _lread(file, &bitmap->bfh,sizeof(BITMAPFILEHEADER));
        if (bitmap->bfh.bfType!=BITMAP_ID)
        {
           _lclose(file);
           return 0;
        }
        _lread(file, &bitmap->bih,sizeof(BITMAPINFOHEADER));
        if (bitmap->bih.biBitCount==24)
        {
                if (bitmap->buffer)
                   delete bitmap->buffer;
                if (!(bitmap->buffer = new UCHAR[bitmap->bih.biSizeImage]))
                {
                        _lclose(file);
                        return 0;
                }
                _lread(file,bitmap->buffer,bitmap->bih.biSizeImage);
        }
        else
           {
           
                        return 0;
           }
        _lclose(file);
        return 1;
} 
то все работает...Помогите разобраться...
работаю в Visual Studio 2008
Изображение вывожу на экран функцией
void DrawBitmap(BITMAP_FILE_PTR bitmap, COLORREF color_key, HDC hdc)
{
        int red, green, blue, mask;
        for(int index=0,x=0,y=0; index<=bitmap->bih.biSizeImage; index += 3,x++)
        {
                red   = bitmap->buffer[index];
                green = bitmap->buffer[index+1];
                blue  = bitmap->buffer[index+2];
                if(RGB(red,green,blue) != color_key)
                        SetPixel(hdc,x,y,RGB(red,green,blue));
                if(!(index%bitmap->bih.biWidth))
                {
                        y++;
                        x=0;
                }
        }
}