Добрый вечер!Кто может мне объяснить где моя ошибка...Если использую такой подход:
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;
}
}
}