使用intel ijl库 RGB转Jpg
来源:互联网 发布:nginx php fpm 配置 编辑:程序博客网 时间:2024/06/07 16:13
BOOL CRawXXX:: EncodeJpegUseIJL(char *dstfile,int *len,int width, int height, char*srcdata, int imageChannels, int quality)
{
BOOL res = FALSE;
JPEG_CORE_PROPERTIES image;
IJLERR err;
ZeroMemory( &image,sizeof( JPEG_CORE_PROPERTIES ) );
IJLIOTYPE iotype;
try
{
if( ijlInit( &image ) != IJL_OK )
{
OutputDebugString("Can't initialize Intel(R) JPEG library" );
return FALSE;
}
image.DIBWidth =width;
image.DIBHeight =height;
image.DIBBytes = (unsignedchar*)srcdata;
if (!len || *len == 0)
{
image.JPGFile =dstfile;
iotype = IJL_JFILE_WRITEWHOLEIMAGE;
}
else
{
image.JPGBytes = (unsignedchar*)dstfile;
image.JPGSizeBytes = *len;
iotype = IJL_JBUFF_WRITEWHOLEIMAGE;
}
image.JPGWidth =width;
image.JPGHeight =abs(height);
image.jquality =quality;
switch(imageChannels)
{
case 1:
image.DIBColor =IJL_G;
image.DIBChannels = 1;
image.DIBPadBytes =IJL_DIB_PAD_BYTES(image.DIBWidth,1);
image.JPGColor =IJL_G;
image.JPGChannels = 1;
image.JPGSubsampling =IJL_NONE;
break;
case 3:
image.DIBColor =IJL_BGR;
image.DIBChannels = 3;
image.DIBPadBytes =IJL_DIB_PAD_BYTES(image.DIBWidth,3);
image.JPGColor =IJL_YCBCR;
image.JPGChannels = 3;
image.JPGSubsampling =IJL_411;
break;
case 4:
image.DIBColor =IJL_RGBA_FPX;
image.DIBChannels = 4;
image.DIBPadBytes =IJL_DIB_PAD_BYTES(image.DIBWidth,4);
image.JPGColor =IJL_YCBCRA_FPX;
image.JPGChannels = 4;
image.JPGSubsampling =IJL_4114;
break;
default:
break;
}
if( (err =ijlWrite( &image,iotype )) != IJL_OK )
{
OutputDebugString("Can't write image(%d)");
}
if (len)
*len = image.JPGSizeBytes;
if( ijlFree( &image ) != IJL_OK )
{
OutputDebugString("Can't free Intel(R) JPEG library" );
}
res = TRUE;
}
catch (...)
{
OutputDebugString( "EncodeJpegUseIJL unknown error" );
}
return res;
}
参数说明:
参数分别是:[输出参数]压缩后的缓冲区、大小,[输入]bmp宽、高,bmp缓冲区,图像位(一般写 3),压缩质量1-99。
调用方式:
char *bjpgData=newchar[pRgb888.width*pRgb888.height*3];
int lSize=1628*1236*3;
if(EncodeJpegUseIJL((char*)bjpgData,&lSize,pRgb888.width,pRgb888.height*(-1),(char*)pRgb888.buffer,3,80))
{
//压缩成功了
TRACE("rgb to jpg success\n");
}
//保存图像
SYSTEMTIME t;
GetLocalTime(&t);
char filename[128];
sprintf(filename,"%04d-%02d-%02d-%02d-%02d-%02d-%03d.jpg",
t.wYear,t.wMonth, t.wDay,
t.wHour,t.wMinute, t.wSecond, t.wMilliseconds);
FILE *fp =fopen(filename,"wb");
fwrite(bjpgData,lSize, 1, fp);
fclose(fp);
封装后的函数如下:
//ijl bmp to jpg 其中ijlInit等函数的定义
int CImgXXX:rgb24_to_jpeg_ijl(unsignedchar *data,intimage_width, intimage_height, char *filename,int quality )
{
JPEG_CORE_PROPERTIES jcprops;
IJLERR jerr;
jerr = ijlInit(&jcprops);
if(IJL_OK !=jerr)
{
/*MessageBox(ijlErrorStr(jerr),"ijlInit function called failed!",MB_OK);*/
ijlFree(&jcprops);
return -1;
}
long LineSize = (image_width *3+3)/4*4;
//initialize the compression parameters describing the kind of Bitmap we are encoding from
jcprops.DIBChannels = 3;
jcprops.DIBColor =IJL_BGR;//Color space of uncompressed data.
jcprops.DIBHeight =image_height;
jcprops.DIBWidth =image_width;
jcprops.DIBPadBytes =IJL_DIB_PAD_BYTES(jcprops.DIBWidth,jcprops.JPGChannels);
//
jcprops.JPGWidth =image_width;
jcprops.JPGHeight =image_height;
jcprops.JPGFile =filename;
int w,h;
w = image_width;
h = image_height;
BYTE * JPEGimgdata = new BYTE[image_width*image_height*3];
for(inti=0;i<h;i++)
{
memcpy(JPEGimgdata+i*LineSize,data+(h-i-1)*LineSize,LineSize);
}
jcprops.DIBBytes =JPEGimgdata;
//write the entire JPEG image. this create a JFIF file.
jerr = ijlWrite(&jcprops,IJL_JFILE_WRITEWHOLEIMAGE);
if(IJL_OK !=jerr)
{
//MessageBox(ijlErrorStr(jerr),"ijlWrite function called failed!",MB_OK);
//release the IJL
ijlFree(&jcprops);
//release file
delete[] JPEGimgdata;
JPEGimgdata = NULL;
return -1;
}
//release the IJL
ijlFree(&jcprops);
delete[] JPEGimgdata;
JPEGimgdata = NULL;
return 0;
}
- 使用intel ijl库 RGB转Jpg
- 使用ijl库Jpg转RGB
- RGB转jpg使用libjpeg库实现
- RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB(转载)
- RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB
- Intel IJL 简明操作
- ijl yuv422转jpeg
- ijl JPEG转Yuv422
- Windows下使用IJL编解码图片
- 使用jpeglib库实现bmp转jpg
- 使用jpeglib库实现bmp转jpg
- 使用jpeglib库实现bmp转jpg
- 使用jpeglib库实现bmp转jpg
- jpg转bmp(使用libjpeg库)
- E680I RGB转换成JPG
- I=imread('RGB.jpg');
- BMP转JPG(法一)使用jpeglib库实现bmp转jpg (转)
- BMP转JPG(法一)使用jpeglib库实现bmp转jpg
- mysql 替换某个字段中的某个字符
- JAVA的Proxy动态代理在自动化测试中的应用
- 中位数和顺序统计量(第9章)
- Linux安装PHP7.0.2
- Kali 2.0 RTL8192eu驱动安装(记录贴)
- 使用intel ijl库 RGB转Jpg
- 《Android开发精要》读书笔记——Android应用模型
- UVA 11462(p39)----Age Sort
- iOS中的正则表达式
- MVC View中获取action、controller、area名称
- JAVA生产者消费者的实现
- Android中的消息机制Handler、Message、Looper之间关系
- jitter buffer QoS的解决方案
- iOS开发系列--IOS程序开发概览