直接在内存里进行BMP-->JPG,intel的IJL15库该如何使用?
intel的IJL15库该如何使用?我试了2个intel文档里的例子,一个是《A Memory-Mapped Bitmap
implementation of a JPEG Encoder》,结果在Mapped BMP文件时就出错了。
另一个是将一个内存中的DIB数据转化成内存中JPG格式数据(IJL_JBUFF_WRITEWHOLEIMAGE方式),然后我再save到硬盘上,执行成功了,JPG文件也生成了,但是JPG文件用查看器打开看却是乱的(好像还是黑白的),代码如下:
BOOL bres;
IJLERR jerr;
DWORD dwRgbBufferSize;
BYTE* lpTemp = NULL;
JPEG_CORE_PROPERTIES jcprops;
bres = TRUE;
__try
{
// Initialize the Intel(R) JPEG Library.
jerr = ijlInit(&jcprops);
if(IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
dwRgbBufferSize = m_nWidth * m_nHeight * 3;
lpTemp = new BYTE [dwRgbBufferSize];
if (NULL == lpTemp)
{
bres = FALSE;
__leave;
}
TRACE("%d",IJL_DIB_PAD_BYTES(jcprops.DIBWidth,jcprops.DIBChannels));
// Set up information to
jcprops.DIBWidth = m_nWidth;
jcprops.DIBHeight = m_nHeight; // Implies a bottom-up DIB.
jcprops.DIBBytes = m_pTmpSrcImg;
jcprops.DIBChannels = 3;
jcprops.DIBPadBytes = IJL_DIB_PAD_BYTES(jcprops.DIBWidth,jcprops.DIBChannels);
jcprops.DIBColor = IJL_BGR;
jcprops.JPGWidth = m_nWidth;
jcprops.JPGHeight = m_nHeight;
jcprops.JPGFile = NULL;
jcprops.JPGBytes = lpTemp;
jcprops.JPGSizeBytes = dwRgbBufferSize;
jcprops.JPGChannels = 3;
jcprops.JPGColor = IJL_YCBCR;
jcprops.JPGSubsampling = IJL_411; // 4:1:1 subsampling.
jcprops.jquality = quality; // select "good" image quality
// Write the actual JPEG image from the pixel buffer.
jerr = ijlWrite(&jcprops,IJL_JBUFF_WRITEWHOLEIMAGE);//IJL_JFILE_WRITEWHOLEIMAGE
if(IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
} // try
__finally
{
if(FALSE == bres)
{
if (NULL != lpTemp)
{
delete[] lpTemp;
lpTemp = NULL;
}
}
*lppJpgBuffer = lpTemp;
*lpdwJpgBufferSize = jcprops.JPGSizeBytes;
// Clean up the Intel(R) JPEG Library.
ijlFree(&jcprops);
}
return bres;
后来我用了IJL_JFILE_WRITEWHOLEIMAGE方式直接生成JPG到硬盘上,结果生成的JPG文件用查看器打开看还是乱的
各位有用过IJL来做BMP-->JPG的,请指点指点,如果有Demo源代码最好,请发送到possible1982@hotmail.com,一定高分相谢!!!!!