void test_gil(char* lpFileName)
{
BITMAPFILEHEADER bfh;
BITMAPINFO BitmapInfo;
FILE* pFile = fopen( lpFileName, "rb" );
fread( &bfh, sizeof(bfh), 1, pFile );
fread( &BitmapInfo, sizeof(BITMAPINFOHEADER), 1, pFile );
int channels = BitmapInfo.bmiHeader.biBitCount / 8;
if( channels != 3 )
{
fclose(pFile);
return;
}
unsigned char* pData = new unsigned char[BitmapInfo.bmiHeader.biWidth * BitmapInfo.bmiHeader.biHeight * 3];
fread( pData, sizeof(char), BitmapInfo.bmiHeader.biWidth * BitmapInfo.bmiHeader.biHeight * 3, pFile );
namespace boost_gil = boost::gil;
boost_gil::bgr8_image_t img;
img.recreate(BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight);
boost_gil::bgr8_view_t vSrc = boost_gil::view(img);
int dwPitch = BitmapInfo.bmiHeader.biWidth * channels;
while( dwPitch % 4 != 0 )
dwPitch++;
unsigned char* p = pData;
boost_gil::bgr8_view_t::iterator it = vSrc.begin();
for( int i = 0; i < BitmapInfo.bmiHeader.biHeight; ++i )
{
for( int j = 0; j < BitmapInfo.bmiHeader.biWidth; ++j, p += channels )
{
boost_gil::bgr8_pixel_t pix(*p, *(p + 1), *(p + 2));
*it++ = pix;
}
}
boost_gil::bgr8_view_t v = boost_gil::flipped_up_down_view(vSrc);
boost_gil::jpeg_write_view("test.jpg", v);
fclose(pFile);
delete[] pData;
}