zoukankan      html  css  js  c++  java
  • 使用Boost.Gil将BMP图片保存为JPG

    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;
    }
  • 相关阅读:
    vim使用技巧
    排序
    2020-3-27 学习面向对象的笔记
    小圆圈第三章答案
    内置函数部分用法
    Pycharm快捷键
    小猿圈第二章答案
    Typora学习笔记
    AI的真实感
    Unity 横版2D移动跳跃问题——关于一段跳与二段跳
  • 原文地址:https://www.cnblogs.com/LinuxHunter/p/1910346.html
Copyright © 2011-2022 走看看