- 浏览: 14666 次
- 性别:
- 来自: 上海
最新评论
使用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;
}
发表评论
-
linux下编程实现mplayer播放器总结
2012-01-20 00:13 1020linux下编程实现mplayer播放器总结 2011年05 ... -
掌握 Linux 调试技术 +Debian/Ubuntu内核编程者必备
2012-01-20 00:13 688掌握 Linux 调试技术 +Debian/Ubuntu内核编 ... -
操作系统学习笔记1
2012-01-20 00:13 674操作系统学习笔记1 2010 ... -
深入理解控制台程序
2012-01-20 00:13 882深入理解控制台程序 2010年06月26日 在Delph ... -
Java IO 技术之基本流类
2012-01-20 00:13 531Java IO 技术之基本流类 ... -
C/C++ > UNIX系统程序设计
2012-01-19 01:05 645C/C++ > UNIX系统程序设 ... -
C段错误总结
2012-01-19 01:05 624C段错误总结 2012年01月07日 最近一段时间在li ... -
liniux学习
2012-01-19 01:05 849liniux学习 2010年06月08日 ... -
PNG文件结构(PNG图片格式)详解(转)
2012-01-19 01:04 1338PNG文件结构(PNG图片格式 ... -
delphi中opengl程序设计
2012-01-19 01:04 659delphi中opengl程序设计 2011年06月07日 ... -
BMP文件加载探讨(转http://blog.sina.com.cn/s/blog_5da62ae00100pyls.html)
2012-01-17 00:28 799BMP文件加载探讨(转http://blog.sina.com ... -
bmp保存
2012-01-17 00:28 355bmp保存 2010年10月24日 CFileDialo ... -
BMP文件操作方法(一个月研究出来的)
2012-01-17 00:27 703BMP文件操作方法(一个月研究出来的) 2011年07月20 ... -
BMP位图文件的存储格式3
2012-01-17 00:27 653BMP位图文件的存储格式3 2011年06月18日 1. ... -
很久很久以前的事
2012-01-16 13:53 735很久很久以前的事 2010年08月01日 今天给自己的大 ... -
2011-9-15
2012-01-16 13:53 5092011-9-15 2011年09月15日 第 1课时 ... -
如何培养一年级学生良好的学习习惯
2012-01-16 13:53 514如何培养一年级学生良好的学习习惯 2011年06月28日 ... -
各位家长非常辛苦,其他老师也很辛苦,孩子也很辛苦。希望我们相互理解,用朋友的角度去商量让孩子变的好起来
2012-01-16 13:53 551各位家长非常辛苦,其他 ... -
日记那点破事儿
2012-01-16 13:53 329日记那点破事儿 2011年0 ...
相关推荐
windows下,使用jpeglib BMP转JPG示例,自己封装了下,附带工程文件
使用JpegLib,将bmp转换jpg -- 源码,自己写的。vc的demo不是很标准。
JPG、BMP图片转换原码。目录结构如下 jpeglib ├─jpeglib (三个必要的.h文件,JPEGLIB.h、JCONFIG.h、JMORECFG.h) │ └─Release (保留编译好的JpegLib.lib) ├─Release (编译好的可执行程序) ├─res └─...
centos7下jpg图像转bmp,调用的是libjpeg-turbo库,代码齐全。解析为bmp时,bmp需要4字节对齐,这里我的做法是,假如一个jpg的tup宽度是157,我这边是将图片扩展为160个像素。代码语言C++
本示例是精简自CxImage类,为了方便支持jpg和bmp之间的转换和网络发送操作。本人并不是原作者,有需要完整版的请到codeproject下载。 1.注意将工程中的CXImage文件夹整个考入你的工程 2.注意添加头文件及相关lib...
利用jpeglib库实现,bmp到jpg的完美转化。
利用jpeglib库实现 jpg到bmp的完美转化
这是利用jpeglib压缩图像的实例代码及jpeglib库源代码,上面的代码均在vs 2005下编译通过
JpegLib是一款免费开源的图片库,我用它将bmp转换成jpg。下面是代码: #include "BMPFILE.H" #include "Jpegfile.h" BOOL BMP2JPG(const char *bmp_file, const char *jpg_file) { try { BMPFile bmpFile; ...
可以将BMP文件和JPG文件转换为YUV数据,可以将YUV数据写成文件,也可以直接在内存中进行操作
ARM Cortex-A8平台Linux下V4l2摄像头采集图片程序,实现yuyv转RGB,RGB转BMP保存,RGB缩放等...利用jpeglib实现RGB转JPEG,并且压缩结果保存至内存中,无需再用文件操作来保存JPEG图片,JPEG经UDP发送至远程服务器端。
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...
以显示JPEG文件,进行JPEG和BMP之间的相互转换,并可以保存为灰度JPG图像。
bmp转化为jpg.接口封装的比较简单,很容易使用.在使用接口时传入bmp的文件名就可以
jpeglib库jpg转化为bmp的demo jpeg的移植我的csdn jpeglib库jpg转化为bmp的demo里面
一个把BMP压缩成JPG的源代码。 附: 1. 编译说明 1) 在VC IDE 选择setting->link> 加jpeg.lib 2) 编译程序 2. 原理 程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区成JPEG文件或缓冲区。
介绍如何在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的源代码。 附: 1. 编译说明 1) 在VC IDE 选择setting->link> 加jpeg.lib 2) 编译程序 2. 原理 程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区成JPEG文件或缓冲区。
C语言压缩JPG图片的例子源码,行程编码,JPEG压缩编码(基本系统) 命令行编译过程如下 vcvars32 rc bmp.rc cl compress.c bmp.res user32.lib gdi32.lib 注意事项: 运行时,文件c:\test.pcx;c:\test....
标准的jpeg编码/解码程序,以c文件方式编写,可以设置为Lib库和exe文件直接执行。其执行结果与“画图”工具编码后的结果一致。Exe执行方法:编译链接后,在“开始”—“运行”输入cmd,进入DOS,然后cd..到根目录,...