使用IJL库遇到的问题

fsdr4546yty 2006-09-09 04:27:17
//----------------------------------------------------------
// An example using the Intel(R) JPEG Library:
// -- 编码 DIB 为 JPEG 缓冲.
//----------------------------------------------------------
BOOL lg_Bitmap::EncodeToJPEGBuffer(
BYTE* lpRgbBuffer,
int32 nWidth,
int32 nHeight,
BYTE** lppJpgBuffer,
DWORD* lpdwJpgBufferSize)
{
BOOL bres;
IJLERR jerr;
DWORD dwRgbBufferSize;
BYTE* lpTemp;
// Allocate the IJL JPEG_CORE_PROPERTIES structure.
JPEG_CORE_PROPERTIES jcprops;
bres = TRUE;
__try
{
// Initialize the Intel(R) JPEG Library.
jerr = ijlInit(&jcprops);
if(IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
jcprops.DIBWidth = nWidth;
jcprops.DIBHeight = -nHeight; // Implies a bottom-up DIB.
jcprops.DIBBytes = lpRgbBuffer + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
jcprops.DIBChannels = 3;
jcprops.DIBPadBytes = IJL_DIB_PAD_BYTES(jcprops.DIBWidth, jcprops.DIBChannels);
jcprops.DIBColor = IJL_BGR;//;

dwRgbBufferSize = (jcprops.DIBWidth * jcprops.DIBChannels + jcprops.DIBPadBytes) * abs(jcprops.DIBHeight);
lpTemp = new BYTE [dwRgbBufferSize];
if(NULL == lpTemp)
{
bres = FALSE;
__leave;
}
// Set up information to write from the pixel buffer.
jcprops.JPGWidth = jcprops.DIBWidth;
jcprops.JPGHeight = abs(jcprops.DIBHeight);
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 = 75; // Select "good" image quality
// Write the actual JPEG image from the pixel buffer.
jerr = ijlWrite(&jcprops,IJL_JBUFF_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;
} // EncodeToJPEGBuffer()


使用:
DWORD* lpdwJpgBufferSize=0;
BYTE**lppJpgBuffer=NULL;
int32 nWidth=1024;
int32 nHeight=768;
lg_Bitmap kl;
kl.EncodeToJPEGBuffer((byte*)lpData,nWidth,nHeight,lppJpgBuffer,lpdwJpgBufferSize);


运行到*lppJpgBuffer = lpTemp;时出现Access Violation错误,请教各位高手
...全文
375 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsdr4546yty 2006-09-09
  • 打赏
  • 举报
回复
3Q
snowbirdfly 2006-09-09
  • 打赏
  • 举报
回复
怎么申请内存空间
就是用new运算符来申请了~~
或者是malloc来申请~~~
snowbirdfly 2006-09-09
  • 打赏
  • 举报
回复
那看看你具体的二维数组要设置多大了~~~
fsdr4546yty 2006-09-09
  • 打赏
  • 举报
回复
BYTE * *lppJpgBuffer=new byte*[4]; 随便大小都可以吗???、
fsdr4546yty 2006-09-09
  • 打赏
  • 举报
回复
snowbirdfly(专心搞好嵌入式~~~)
我刚搞VC,不太清楚两个*怎么申请内存空间,请指教
snowbirdfly 2006-09-09
  • 打赏
  • 举报
回复
**lppJpgBuffer
那就是对应的是二维的~~
像二维数组名一样~~~
lppJpgBuffer没申请空间,那就是愿因阿~~~
fsdr4546yty 2006-09-09
  • 打赏
  • 举报
回复
lppJpgBuffer没申请空间
有一点不太懂的是 **lppJpgBuffer具体含义是什么?***lppJpgBuffer呢?
DentistryDoctor 2006-09-09
  • 打赏
  • 举报
回复
lppJpgBuffer 是否是有效的内存指针?
snowbirdfly 2006-09-09
  • 打赏
  • 举报
回复
出现Access Violation错误
那应该是内存造成的问题~~~
lppJpgBuffer你申请内存空间没有?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧