`
gidlsl
  • 浏览: 14666 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用jpeglib,实现jpg和bmp互转

 
阅读更多

使用jpeglib,实现jpg和bmp互转
2011年10月08日
  到http://www.ijg.org下载库文件
  1、头文件
  #include "afx.h"
  #include 
  extern "C" {
  #include "jpeglib.h"
  }
  #pragma comment( lib , "libjpeg.lib" )
  int ByteAlign( int nBits )
  {   
  int nAlignBytes = ( nBits + 31 ) / 32 * 4;  
  return nAlignBytes;
  }
  extern "C"  int  __declspec(dllexport)  __stdcall JpegFromBMP24(CString &strBmpName,CString &strJpgName,int iCompressed=80); //int nWidth, int nHeight, int nLineBytes, LPBYTE &pJpgOut);
  extern "C"  bool  __declspec(dllexport)  __stdcall JpegToBMP(char *input, char *output);
  2、cpp文件
  #include "JpgFile.h"
  int setBmpHeader(BITMAPINFOHEADER &BMIH, BITMAPFILEHEADER &bmfh,struct jpeg_decompress_struct *info)
  {     
  memset(&BMIH, 0, sizeof(BITMAPINFOHEADER))   ;
  BMIH.biSize = sizeof(BITMAPINFOHEADER)    ;
  BMIH.biBitCount = 24                      ;
  BMIH.biPlanes = 1                         ;
  BMIH.biCompression = BI_RGB;
  BMIH.biWidth   =info->output_width;
  BMIH.biHeight = 0-info->output_height;//高度是负数。表示bmp的反转
  BMIH.biSizeImage = ((((BMIH.biWidth * BMIH.biBitCount) + 31) & ~31) >> 3) * info->output_height;//BMIH.biWidth*cinfo.output_height*3;//((((BMIH.biWidth * BMIH.biBitCount) + 31) & ~31) >> 3) * BMIH.biHeight;
  int nBitsOffset = sizeof(BITMAPFILEHEADER) + BMIH.biSize;
  LONG lImageSize = BMIH.biSizeImage           ;
  LONG lFileSize = nBitsOffset + lImageSize    ;
  bmfh.bfType = 'B'+('M'bmWidth;//位图宽度
  int nHeight=pBitMap->bmHeight;//位图高度
  int nSrcColorBits = (int)(pBitMap->bmBitsPixel);//每个颜色多少位表示
  int nSrcBitsPiexel = 0;
  switch( nSrcColorBits)
  {    
  case 16: 
  nSrcBitsPiexel = 2;  
  break;   
  case 24:    
  nSrcBitsPiexel = 3; //每个像素3个字节
  break;   
  case 32:    
  nSrcBitsPiexel = 4;
  break; 
  default:  
  nSrcBitsPiexel = 3; 
  break;  
  }   
  int nLineBytes = ByteAlign( nWidth * nSrcBitsPiexel * 8 );//字节对齐  每行多少字节
  struct jpeg_compress_struct jcs;//申请压缩结构
  struct jpeg_error_mgr jsrcerr;
  BYTE *pRGB24In =(BYTE*)pBitMap->bmBits;//位图的数据内容
  if (nWidth == 0)         return 0;
  if (nHeight == 0)         return 0;
  /*  initialize the JPEG compression object. */
  jcs.err = jpeg_std_error(&jsrcerr);
  jpeg_create_compress(&jcs);//建立压缩
  unsigned long  lsize = 0;
  BYTE*  lpJpgData = NULL;
  BYTE* pJpgOut=NULL;
  jpeg_mem_dest(&jcs, &lpJpgData, &lsize); //初始化jcs
  jcs.image_width = nWidth; /* image widthPix and height, in pixels */
  jcs.image_height = nHeight;
  jcs.input_components = 3; /* # of color components per pixel */
  jcs.in_color_space = JCS_RGB; /* colorspace of input image */
  jpeg_set_defaults(&jcs);
  int nCompressed = iCompressed; /*[0-100], if 0, quality is best, but size is biggest*/
  jpeg_set_quality(&jcs, nCompressed, TRUE /* limit to baseline-JPEG values */);
  jpeg_start_compress(&jcs, TRUE);//开始压缩
  while (jcs.next_scanline BMP header */       
  fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), out);
  fwrite(&BMIH, 1, sizeof(BITMAPINFOHEADER), out);   
  /* SAMPLEs per row in output buffer */
  row_width = cinfo.output_width * cinfo.output_components;
  /* calculate number of padding */
  num_padding = cinfo.output_width%4;
  /* set buffer */
  buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_width, 1);
  while (cinfo.output_scanline < cinfo.output_height)
  {
  jpeg_read_scanlines(&cinfo, buffer, 1);
  convertColor((char *)buffer[0], cinfo.output_width);
  fwrite(buffer[0], 1, row_width, out);
  fwrite("0", 1, num_padding, out);
  }
  jpeg_finish_decompress(&cinfo);
  jpeg_destroy_decompress(&cinfo);
  fclose(in);
  fclose(out);
  return TRUE;
  }
分享到:
评论

相关推荐

    使用jpeglib BMP转JPG示例

    windows下,使用jpeglib BMP转JPG示例,自己封装了下,附带工程文件

    使用JpegLib,将bmp转换jpg -- 源码

    使用JpegLib,将bmp转换jpg -- 源码,自己写的。vc的demo不是很标准。

    jpeglib(JPG、BMP图片转换原码)

    JPG、BMP图片转换原码。目录结构如下 jpeglib ├─jpeglib (三个必要的.h文件,JPEGLIB.h、JCONFIG.h、JMORECFG.h) │ └─Release (保留编译好的JpegLib.lib) ├─Release (编译好的可执行程序) ├─res └─...

    Linux jpg转bmp

    centos7下jpg图像转bmp,调用的是libjpeg-turbo库,代码齐全。解析为bmp时,bmp需要4字节对齐,这里我的做法是,假如一个jpg的tup宽度是157,我这边是将图片扩展为160个像素。代码语言C++

    jpg与bmp互转及方便网络发送(第三方库,非常简便)

    本示例是精简自CxImage类,为了方便支持jpg和bmp之间的转换和网络发送操作。本人并不是原作者,有需要完整版的请到codeproject下载。 1.注意将工程中的CXImage文件夹整个考入你的工程 2.注意添加头文件及相关lib...

    利用库实现 bmp到jpg的完美转化

    利用jpeglib库实现,bmp到jpg的完美转化。

    利用库实现 jpg到bmp的完美转化

    利用jpeglib库实现 jpg到bmp的完美转化

    jpeglib源代码及实例代码

    这是利用jpeglib压缩图像的实例代码及jpeglib库源代码,上面的代码均在vs 2005下编译通过

    JpegLib, 图片库

    JpegLib是一款免费开源的图片库,我用它将bmp转换成jpg。下面是代码: #include "BMPFILE.H" #include "Jpegfile.h" BOOL BMP2JPG(const char *bmp_file, const char *jpg_file) { try { BMPFile bmpFile; ...

    Jpg图片和Bmp图片转为YUV数据

    可以将BMP文件和JPG文件转换为YUV数据,可以将YUV数据写成文件,也可以直接在内存中进行操作

    Linux 下V4l2摄像头采集图片,实现yuyv转RGB,RGB转BMP,RGB伸缩,RGB转JPEG(保存到内存中),JPEG经UDP发送功能

    ARM Cortex-A8平台Linux下V4l2摄像头采集图片程序,实现yuyv转RGB,RGB转BMP保存,RGB缩放等...利用jpeglib实现RGB转JPEG,并且压缩结果保存至内存中,无需再用文件操作来保存JPEG图片,JPEG经UDP发送至远程服务器端。

    bmp&amp;jpg格式互转

    bmp 到 jpg,jpg 到 bmp的内存图片转换源码,全是c语言实现,非lib库方式,移植性好。源码如下 JCAPIMIN.C JCAPISTD.C JCCOEFCT.C JCCOLOR.C JCDCTMGR.C JCHUFF.C JCHUFF.H JCINIT.C JCMAINCT.C JCMARKER.C...

    jpeglib_Vc_

    以显示JPEG文件,进行JPEG和BMP之间的相互转换,并可以保存为灰度JPG图像。

    BmpToJpg+jpeglib

    bmp转化为jpg.接口封装的比较简单,很容易使用.在使用接口时传入bmp的文件名就可以

    demo.tar.gz

    jpeglib库jpg转化为bmp的demo jpeg的移植我的csdn jpeglib库jpg转化为bmp的demo里面

    BMP压缩成JPG的源代码

    一个把BMP压缩成JPG的源代码。 附: 1. 编译说明 1) 在VC IDE 选择setting-&gt;link&gt; 加jpeg.lib 2) 编译程序 2. 原理 程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区成JPEG文件或缓冲区。

    20121211 1559 BMP2JPG 调用libjpeg库.7z

    介绍如何在linux下编译生成libjpeg库,然后调用libjpeg库将BMP图片转成JPG图片。 tar jvxf libtool-2.2.4.tar.bz2 cd libtool-2.2.4/ ./configure CC=arm-linux-gnu-gcc --build=i686-linux --host=arm-linux --...

    一个把BMP压缩成JPG的源代码

    一个把BMP压缩成JPG的源代码。 附: 1. 编译说明 1) 在VC IDE 选择setting-&gt;link&gt; 加jpeg.lib 2) 编译程序 2. 原理 程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区成JPEG文件或缓冲区。

    C语言压缩JPG图片的例子.rar

    C语言压缩JPG图片的例子源码,行程编码,JPEG压缩编码(基本系统)  命令行编译过程如下  vcvars32  rc bmp.rc  cl compress.c bmp.res user32.lib gdi32.lib  注意事项:  运行时,文件c:\test.pcx;c:\test....

    标准的jpeg编码/解码程序

    标准的jpeg编码/解码程序,以c文件方式编写,可以设置为Lib库和exe文件直接执行。其执行结果与“画图”工具编码后的结果一致。Exe执行方法:编译链接后,在“开始”—“运行”输入cmd,进入DOS,然后cd..到根目录,...

Global site tag (gtag.js) - Google Analytics