附VC编译的源代码:下载地址
BOOL BmpToJpg( int nWidth, int nHeight, int nPixelBytes, BYTE* byBmpData, BYTE** byJpgData, unsigned long* nSize ) { BOOL bResult = FALSE; jpeg_compress_struct jCompress; jpeg_error_mgr jErrorMgr; jCompress.err = jpeg_std_error( &jErrorMgr ); jpeg_create_compress( &jCompress ); jpeg_mem_dest( &jCompress, byJpgData, nSize ); jCompress.image_width = nWidth; jCompress.image_height = nHeight; jCompress.input_components = nPixelBytes; jCompress.in_color_space = JCS_UNKNOWN; jpeg_set_defaults( &jCompress ); jpeg_set_quality ( &jCompress, 70, true ); jpeg_start_compress( &jCompress, true ); int nLineWidth = nWidth * nPixelBytes; for ( int i = 0; i < nHeight; ++i ) { BYTE* lpJpgBits = byBmpData + ( nHeight - i - 1 ) * nLineWidth; JSAMPROW row_pointer = lpJpgBits; jpeg_write_scanlines( &jCompress, &row_pointer, 1 ); } jpeg_finish_compress( &jCompress ); jpeg_destroy_compress( &jCompress ); return bResult; } BOOL JpgToBmp( BYTE* byJpgData, BYTE* byBmpData, unsigned long* nSize ) { BOOL bResult = FALSE; jpeg_decompress_struct jDecompress; jpeg_error_mgr jErrorMgr; jDecompress.err = jpeg_std_error( &jErrorMgr ); jpeg_create_decompress( &jDecompress ); jpeg_mem_src( &jDecompress, byJpgData, *nSize ); jpeg_read_header( &jDecompress, true ); jpeg_start_decompress( &jDecompress ); int nHeight = jDecompress.output_height; int nLineWidth = jDecompress.output_components * jDecompress.output_width; for ( int i = 0; i < nHeight; ++i ) { BYTE* lpBmBits = byBmpData + ( nHeight - i - 1 ) * nLineWidth; jpeg_read_scanlines( &jDecompress, &lpBmBits, 1 ); } jpeg_finish_decompress( &jDecompress ); jpeg_destroy_decompress( &jDecompress ); *nSize = nLineWidth * nHeight; return bResult; }