#include “ijl.h”
BOOL ConverJPG2BID(BYTE *lpJpgBuffer,
DWORD dwJpgBufferSize,
BYTE *lppRgbBuffer,
DWORD *lpdwWidth,
DWORD *lpdwHeight,
DWORD *lpdwNumberOfChannels)
{
BOOL bres;
IJLERR jerr;
DWORD dwWholeImageSize;
BYTE *lpTemp = lppRgbBuffer;
JPEG_CORE_PROPERTIES jcprops;
bres = TRUE;
__try
{
jerr = ijlInit(&jcprops);
if (IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
jcprops.JPGFile = NULL;
jcprops.JPGBytes = lpJpgBuffer;
jcprops.JPGSizeBytes = dwJpgBufferSize;
jerr = ijlRead(&jcprops, IJL_JBUFF_READPARAMS);
if (IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
switch (jcprops.JPGChannels)
{
case 1:
{
jcprops.JPGColor = IJL_G;
jcprops.DIBColor = IJL_RGB;
jcprops.DIBChannels = 3;
break;
}
case 3:
{
jcprops.JPGColor = IJL_YCBCR;
jcprops.DIBColor = IJL_BGR;
jcprops.DIBChannels = 3;
break;
}
default:
{
jcprops.JPGColor = IJL_OTHER;
jcprops.DIBColor = IJL_OTHER;
jcprops.DIBChannels = jcprops.JPGChannels;
break;
}
}
dwWholeImageSize = jcprops.JPGWidth * jcprops.JPGHeight *
jcprops.DIBChannels;
jcprops.DIBWidth = jcprops.JPGWidth;
jcprops.DIBHeight = jcprops.JPGHeight;
jcprops.DIBPadBytes = 0;
jcprops.DIBBytes = lpTemp;
jerr = ijlRead(&jcprops, IJL_JBUFF_READWHOLEIMAGE);
if (IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
} // __try
__finally
{
ijlFree(&jcprops);
*lpdwWidth = jcprops.DIBWidth;
*lpdwHeight = jcprops.DIBHeight;
*lpdwNumberOfChannels = jcprops.DIBChannels;
} // __finally
return bres;
}
int CPictureXXX::SetJpegBuffer(void *pJpegBuf,
DWORD len,
BYTE *lppRgbBuffer,
DWORD *lpdwWidth,
DWORD *lpdwHeight)
{
DWORD nChannels = 0;
ConverJPG2BID((BYTE *)pJpegBuf, len, lppRgbBuffer, &(*lpdwWidth),
&(*lpdwHeight), &nChannels);
return 0;
}
参数解释:
pJpegBuf:保存Jpeg图像数据的缓冲区;
len:保存Jpeg图像数据的size
lppRgbBuffer:保存转换成RGB后的图像缓冲区;
lpdwWidth:图像的宽,从jpg图像中获取;
lpdwHeight:图像的高,从jpg图像中获取;