关闭窗口的时候出错 我写了个显示jpeg图像的对话框程序,现在可以显示图像,但是在关闭窗口的时候就会出错,这是为什么?请各位指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CMyProjectDlg::OnOpenfile() { // TODO: Add your control notification handler code here OPENFILENAME of; char filename[100]=""; char szFilter[100]="所有文件(*.*)\0*.*\0图象源文件(*.jpg)\0*.jpg\0\0"; char szCustomFilter[]="*.jpg\0"; of.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST; of.hInstance=NULL; of.hwndOwner=this->m_hWnd; of.lCustData=0; of.lpfnHook=NULL; of.lStructSize=sizeof(of); of.lpstrCustomFilter=NULL; of.nMaxCustFilter=0; of.lpstrDefExt=NULL; of.lpstrFile=NULL; of.nMaxFile=0; of.lpstrFileTitle=filename; of.nMaxFileTitle=sizeof(filename); of.lpstrFilter=szFilter; of.nFilterIndex=1; of.lpstrInitialDir="d:\\qcif"; of.lpstrTitle=NULL; of.lpTemplateName=NULL; of.nFileExtension=0; of.nFileOffset=0; unsigned char *fJpegBuf; int i=0; char bfilename[100]="c:\\"; FILE *fJpeg=NULL; static HFILE file; if(GetOpenFileName(&of)) { static OFSTRUCT ofs; ofs.cBytes=sizeof(ofs); file=OpenFile(filename,&ofs,OF_READ); int nBytetoRead=GetFileSize((HANDLE)file,NULL); unsigned long nByteRead; fJpegBuf=(unsigned char *) malloc(nBytetoRead); ReadFile((HANDLE)file,fJpegBuf,nBytetoRead,&nByteRead,NULL); i=0; while(filename[i]!='.') { bfilename[i+3]=filename[i]; i++; } bfilename[i+3]='\0'; strcat(bfilename,".bmp"); // if(!this->m_clrJpegDec.ShowJpegToScreen(fJpegBuf,bfilename)) // {} m_clrJpegDec.ShowJpegToScreen(fJpegBuf,bfilename); //MessageBox("解码出错!"); //else MessageBox("解码成功,BMP文件保存到C盘根目录"); m_palDIB=NULL; DrawBMP(IDC_STATIC,m_clrJpegDec.hDIB); } else MessageBox("文件出错!"); }void CMyProjectDlg::DrawBMP(int nID, HDIB ndib){ BeginWaitCursor(); // 获取DIB HDIB hDIB = ndib; // 判断DIB是否为空 if (hDIB != NULL) { //LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); // 获取DIB宽度 int cxDIB = (int) m_clrJpegDec.ImgWidth; // 获取DIB高度 int cyDIB = (int) m_clrJpegDec.ImgHeight; // ::GlobalUnlock((HGLOBAL) hDIB); CRect rcDIB; rcDIB.top = rcDIB.left = 0; rcDIB.right = cxDIB; rcDIB.bottom = cyDIB; CWnd* pWnd=GetDlgItem(nID); CDC* pDC=pWnd->GetDC(); RECT rect; pWnd->GetClientRect(&rect);//得到控件矩形区域 CRect rcDest(rect); // 输出DIB PaintDIB(pDC->m_hDC, &rcDest, hDIB,&rcDIB,m_palDIB); } // 恢复正常光标 EndWaitCursor(); }BOOL CClrJpegDecode::ShowJpegToScreen(unsigned char *hJpegBuf, char *filename){ DWORD ImgSize; DWORD BufSize; int funcret; lpImgData=NULL; FILE *hfbmp; LPSTR pDIB; /////////////////////// //NO DATA! Return FALSE if(hJpegBuf==NULL) return FALSE; lpJpegBuf=hJpegBuf; InitTable(); if((funcret=InitTag())!=FUNC_OK){ delete hJpegBuf; return FALSE; } //create new bitmapfileheader and bitmapinfoheader //------------------------------------------------ memset((char *)&bf,0,sizeof(BITMAPFILEHEADER)); memset((char *)&bi,0,sizeof(BITMAPINFOHEADER)); bi.biSize=(DWORD)sizeof(BITMAPINFOHEADER); bi.biWidth=(LONG)(ImgWidth); bi.biHeight=(LONG)(ImgHeight); bi.biPlanes=1; bi.biBitCount=24; bi.biClrUsed=0; bi.biClrImportant=0; bi.biCompression=BI_RGB; NumColors=0; LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount); //=W(288*24)= ImgSize=(DWORD)LineBytes*bi.biHeight; bf.bfType=0x4d42; bf.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD)+ImgSize; bf.bfOffBits=(DWORD)(NumColors*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)); //BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER); BufSize=ImgSize; //create BitmapHead End //--------------------- if((hImgData=new unsigned char[BufSize])==NULL){ delete hImgData; return FALSE; } lpImgData=hImgData; //memcpy(lpImgData,(char *)&bi,sizeof(BITMAPINFOHEADER)); lpPtr=(char *)lpImgData; if((SampRate_Y_H==0)||(SampRate_Y_V==0)){ delete hJpegBuf; hJpegBuf=NULL; delete hImgData; hImgData=NULL; return FALSE ; } funcret=Decode(); if(funcret==FUNC_OK){ ///// ///// /////////NEED SHOW CODE; //// //// /* hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT, (LPSTR)lpImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpImgData, DIB_RGB_COLORS); */ // hfbmp=fopen(filename,"w+b"); // fwrite((LPSTR)&bf,1,sizeof(BITMAPFILEHEADER),hfbmp); // fwrite((LPSTR)&bi,1,sizeof(BITMAPINFOHEADER),hfbmp); // fwrite((LPSTR)lpImgData,1,BufSize,hfbmp); // fclose(hfbmp); hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, bf.bfSize); pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); memcpy(pDIB,lpImgData,ImgSize); ::GlobalUnlock((HGLOBAL) hDIB);// ReleaseDC(hWnd,hDc); GlobalUnlock(hJpegBuf); GlobalFree(hJpegBuf); GlobalUnlock(hImgData); GlobalFree(hImgData); return TRUE; } else{ delete hJpegBuf; hJpegBuf=NULL; delete hImgData; hImgData=NULL; return FALSE; }}void CClrJpegDecode::StoreBuffer(){ short i,j,k1,k2,k3; unsigned char *lpbmp; unsigned char R,G,B; int y,u,v,rr,gg,bb; for(i=0;i<16/*SampRate_Y_V*8*/;i++){ k1=i<<4;//8*SampRate_Y_H; k2=(i>>1)<<4;//8*SampRate_Y_H; if((sizei+i)<ImgHeight){ lpbmp=((unsigned char *)lpPtr+(DWORD)(ImgHeight-sizei-i-1)*LineBytes+sizej*3); for(j=0;j<16/*SampRate_Y_H*8*/;j++){ if((sizej+j)<ImgWidth){ y=Y[k1+j]; k3=k2+(j>>1); // j/2; u=U[k3]; v=V[k3]; rr=((y<<8)+18*u+367*v)>>8; gg=((y<<8)-159*u-220*v)>>8; bb=((y<<8)+411*u-29*v)>>8; R=(unsigned char)rr; G=(unsigned char)gg; B=(unsigned char)bb; if (rr&0xffffff00) if (rr>255) R=255; else if (rr<0) R=0; if (gg&0xffffff00) if (gg>255) G=255; else if (gg<0) G=0; if (bb&0xffffff00) if (bb>255) B=255; else if (bb<0) B=0; *lpbmp++=B; *lpbmp++=G; *lpbmp++=R; } else break; } } else break; }}void CMyProjectDlg::DrawBMP(int nID, HDIB ndib){ BeginWaitCursor(); // 获取DIB HDIB hDIB = ndib; // 判断DIB是否为空 if (hDIB != NULL) { //LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); // 获取DIB宽度 int cxDIB = (int) m_clrJpegDec.ImgWidth; // 获取DIB高度 int cyDIB = (int) m_clrJpegDec.ImgHeight; // ::GlobalUnlock((HGLOBAL) hDIB); CRect rcDIB; rcDIB.top = rcDIB.left = 0; rcDIB.right = cxDIB; rcDIB.bottom = cyDIB; CWnd* pWnd=GetDlgItem(nID); CDC* pDC=pWnd->GetDC(); RECT rect; pWnd->GetClientRect(&rect);//得到控件矩形区域 CRect rcDest(rect); // 输出DIB PaintDIB(pDC->m_hDC, &rcDest, hDIB,&rcDIB,m_palDIB); } // 恢复正常光标 EndWaitCursor(); }bool CMyProjectDlg::PaintDIB(HDC hDC, LPRECT lpDCRect, HDIB hDIB, LPRECT lpDIBRect, CPalette *pPal){ BITMAPINFO* lpDIBHdr; // BITMAPINFOHEADER指针 LPSTR lpDIBBits;// DIB象素指针 HPALETTE hPal=NULL; // DIB调色板 HPALETTE hOldPal=NULL; // 以前的调色板 BOOL bSuccess; // 判断DIB对象是否为空 if (hDIB == NULL) { // 返回 return FALSE; } lpDIBHdr=(BITMAPINFO*)new char(sizeof(BITMAPINFOHEADER)); // 锁定DIB lpDIBBits = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); lpDIBHdr->bmiHeader=m_clrJpegDec.bi;/* if (pPal != NULL) { hPal = (HPALETTE) pPal->m_hObject; // 选中调色板 hOldPal = ::SelectPalette(hDC, hPal, TRUE); }*/ // 设置显示模式 ::SetStretchBltMode(hDC, COLORONCOLOR); // 判断是调用StretchDIBits()还是SetDIBitsToDevice()来绘制DIB对象 if ((RECTWIDTH(lpDCRect) == RECTWIDTH(lpDIBRect)) && (RECTHEIGHT(lpDCRect) == RECTHEIGHT(lpDIBRect))) { // 原始大小,不用拉伸。 bSuccess = ::SetDIBitsToDevice(hDC, // hDC lpDCRect->left, // DestX lpDCRect->top, // DestY RECTWIDTH(lpDCRect), // nDestWidth RECTHEIGHT(lpDCRect), // nDestHeight lpDIBRect->right, // SrcX (int)m_clrJpegDec.ImgHeight - lpDIBRect->top, // SrcY 0, // nStartScan (WORD)m_clrJpegDec.ImgHeight, // nNumScans lpDIBBits, // lpBits (LPBITMAPINFO)lpDIBHdr, // lpBitsInfo DIB_RGB_COLORS); // wUsage } else { // 非原始大小,拉伸。 bSuccess = ::StretchDIBits(hDC, // hDC lpDCRect->left, // DestX lpDCRect->top, // DestY RECTWIDTH(lpDCRect), // nDestWidth RECTHEIGHT(lpDCRect), // nDestHeight lpDIBRect->left, // SrcX lpDIBRect->top, // SrcY RECTWIDTH(lpDIBRect), // wSrcWidth RECTHEIGHT(lpDIBRect), // wSrcHeight lpDIBBits, // lpBits (LPBITMAPINFO)lpDIBHdr, // lpBitsInfo DIB_RGB_COLORS, // wUsage SRCCOPY); // dwROP } // 解除锁定 ::GlobalUnlock((HGLOBAL) hDIB); /* // 恢复以前的调色板 if (hOldPal != NULL) { ::SelectPalette(hDC, hOldPal, TRUE); } */ // 返回 return true;}BOOL CClrJpegDecode::ShowJpegToScreen(unsigned char *hJpegBuf, char *filename)这个函数是用来解码jpeg并转换成bmp的,哪位高手帮我看看到底是哪的问题,真不甚感激,我改了两天都没找到毛病错误显示是 应用程序发生异常unknow software exception(0X80000003)位置为0x7c92120e。 两个对话框数据间引用 vc++循环结构的应用 让对话框可以放大缩小 如何让CToolTipCtrl显示的时候不闪烁,鼠标移开的时候消失? VC2008下单文本程序中的outlookbar效果 写VC程序是用VC6好还是VC2005好? 高手进来抢分!!!! 一个ActiveX控件的打印问题,急等!!! 结构体如何加上构造函数? 怎么办???? CView的Create居然在CFrameWnd的Create之前调用? 高手帮我看一小段程序,是按钮实现打开文件
{
// TODO: Add your control notification handler code here
OPENFILENAME of;
char filename[100]="";
char szFilter[100]="所有文件(*.*)\0*.*\0图象源文件(*.jpg)\0*.jpg\0\0";
char szCustomFilter[]="*.jpg\0";
of.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
of.hInstance=NULL;
of.hwndOwner=this->m_hWnd;
of.lCustData=0;
of.lpfnHook=NULL;
of.lStructSize=sizeof(of);
of.lpstrCustomFilter=NULL;
of.nMaxCustFilter=0;
of.lpstrDefExt=NULL;
of.lpstrFile=NULL;
of.nMaxFile=0;
of.lpstrFileTitle=filename;
of.nMaxFileTitle=sizeof(filename);
of.lpstrFilter=szFilter;
of.nFilterIndex=1;
of.lpstrInitialDir="d:\\qcif";
of.lpstrTitle=NULL;
of.lpTemplateName=NULL;
of.nFileExtension=0;
of.nFileOffset=0; unsigned char *fJpegBuf;
int i=0;
char bfilename[100]="c:\\";
FILE *fJpeg=NULL;
static HFILE file; if(GetOpenFileName(&of))
{
static OFSTRUCT ofs;
ofs.cBytes=sizeof(ofs); file=OpenFile(filename,&ofs,OF_READ);
int nBytetoRead=GetFileSize((HANDLE)file,NULL);
unsigned long nByteRead;
fJpegBuf=(unsigned char *) malloc(nBytetoRead);
ReadFile((HANDLE)file,fJpegBuf,nBytetoRead,&nByteRead,NULL); i=0;
while(filename[i]!='.') { bfilename[i+3]=filename[i]; i++; }
bfilename[i+3]='\0';
strcat(bfilename,".bmp");
// if(!this->m_clrJpegDec.ShowJpegToScreen(fJpegBuf,bfilename))
// {}
m_clrJpegDec.ShowJpegToScreen(fJpegBuf,bfilename);
//MessageBox("解码出错!");
//else MessageBox("解码成功,BMP文件保存到C盘根目录");
m_palDIB=NULL;
DrawBMP(IDC_STATIC,m_clrJpegDec.hDIB);
}
else MessageBox("文件出错!");
}void CMyProjectDlg::DrawBMP(int nID, HDIB ndib)
{ BeginWaitCursor(); // 获取DIB
HDIB hDIB = ndib;
// 判断DIB是否为空
if (hDIB != NULL)
{
//LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) m_clrJpegDec.ImgWidth;
// 获取DIB高度
int cyDIB = (int) m_clrJpegDec.ImgHeight;
// ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CWnd* pWnd=GetDlgItem(nID);
CDC* pDC=pWnd->GetDC();
RECT rect;
pWnd->GetClientRect(&rect);//得到控件矩形区域
CRect rcDest(rect);
// 输出DIB
PaintDIB(pDC->m_hDC, &rcDest, hDIB,&rcDIB,m_palDIB);
}
// 恢复正常光标
EndWaitCursor(); }
BOOL CClrJpegDecode::ShowJpegToScreen(unsigned char *hJpegBuf, char *filename)
{
DWORD ImgSize;
DWORD BufSize;
int funcret;
lpImgData=NULL;
FILE *hfbmp;
LPSTR pDIB;
///////////////////////
//NO DATA! Return FALSE if(hJpegBuf==NULL)
return FALSE;
lpJpegBuf=hJpegBuf; InitTable(); if((funcret=InitTag())!=FUNC_OK){
delete hJpegBuf;
return FALSE;
} //create new bitmapfileheader and bitmapinfoheader
//------------------------------------------------ memset((char *)&bf,0,sizeof(BITMAPFILEHEADER));
memset((char *)&bi,0,sizeof(BITMAPINFOHEADER)); bi.biSize=(DWORD)sizeof(BITMAPINFOHEADER);
bi.biWidth=(LONG)(ImgWidth);
bi.biHeight=(LONG)(ImgHeight);
bi.biPlanes=1;
bi.biBitCount=24;
bi.biClrUsed=0;
bi.biClrImportant=0;
bi.biCompression=BI_RGB;
NumColors=0;
LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount); //=W(288*24)=
ImgSize=(DWORD)LineBytes*bi.biHeight; bf.bfType=0x4d42;
bf.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD)+ImgSize;
bf.bfOffBits=(DWORD)(NumColors*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));
//BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
BufSize=ImgSize; //create BitmapHead End
//--------------------- if((hImgData=new unsigned char[BufSize])==NULL){
delete hImgData;
return FALSE;
} lpImgData=hImgData;
//memcpy(lpImgData,(char *)&bi,sizeof(BITMAPINFOHEADER));
lpPtr=(char *)lpImgData; if((SampRate_Y_H==0)||(SampRate_Y_V==0)){
delete hJpegBuf;
hJpegBuf=NULL;
delete hImgData;
hImgData=NULL;
return FALSE ;
} funcret=Decode(); if(funcret==FUNC_OK){ /////
/////
/////////NEED SHOW CODE;
////
////
/*
hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT,
(LPSTR)lpImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpImgData, DIB_RGB_COLORS);
*/ // hfbmp=fopen(filename,"w+b");
// fwrite((LPSTR)&bf,1,sizeof(BITMAPFILEHEADER),hfbmp);
// fwrite((LPSTR)&bi,1,sizeof(BITMAPINFOHEADER),hfbmp);
// fwrite((LPSTR)lpImgData,1,BufSize,hfbmp);
// fclose(hfbmp);
hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, bf.bfSize);
pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
memcpy(pDIB,lpImgData,ImgSize);
::GlobalUnlock((HGLOBAL) hDIB);// ReleaseDC(hWnd,hDc);
GlobalUnlock(hJpegBuf);
GlobalFree(hJpegBuf);
GlobalUnlock(hImgData);
GlobalFree(hImgData);
return TRUE;
}
else{
delete hJpegBuf;
hJpegBuf=NULL;
delete hImgData;
hImgData=NULL;
return FALSE;
}
}void CClrJpegDecode::StoreBuffer()
{ short i,j,k1,k2,k3;
unsigned char *lpbmp;
unsigned char R,G,B;
int y,u,v,rr,gg,bb; for(i=0;i<16/*SampRate_Y_V*8*/;i++){
k1=i<<4;//8*SampRate_Y_H;
k2=(i>>1)<<4;//8*SampRate_Y_H;
if((sizei+i)<ImgHeight){
lpbmp=((unsigned char *)lpPtr+(DWORD)(ImgHeight-sizei-i-1)*LineBytes+sizej*3);
for(j=0;j<16/*SampRate_Y_H*8*/;j++){
if((sizej+j)<ImgWidth){
y=Y[k1+j];
k3=k2+(j>>1); // j/2;
u=U[k3];
v=V[k3];
rr=((y<<8)+18*u+367*v)>>8;
gg=((y<<8)-159*u-220*v)>>8;
bb=((y<<8)+411*u-29*v)>>8;
R=(unsigned char)rr;
G=(unsigned char)gg;
B=(unsigned char)bb;
if (rr&0xffffff00) if (rr>255) R=255; else if (rr<0) R=0;
if (gg&0xffffff00) if (gg>255) G=255; else if (gg<0) G=0;
if (bb&0xffffff00) if (bb>255) B=255; else if (bb<0) B=0;
*lpbmp++=B;
*lpbmp++=G;
*lpbmp++=R;
}
else break;
}
}
else break;
}
}
void CMyProjectDlg::DrawBMP(int nID, HDIB ndib)
{ BeginWaitCursor(); // 获取DIB
HDIB hDIB = ndib;
// 判断DIB是否为空
if (hDIB != NULL)
{
//LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) m_clrJpegDec.ImgWidth;
// 获取DIB高度
int cyDIB = (int) m_clrJpegDec.ImgHeight;
// ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CWnd* pWnd=GetDlgItem(nID);
CDC* pDC=pWnd->GetDC();
RECT rect;
pWnd->GetClientRect(&rect);//得到控件矩形区域
CRect rcDest(rect);
// 输出DIB
PaintDIB(pDC->m_hDC, &rcDest, hDIB,&rcDIB,m_palDIB);
}
// 恢复正常光标
EndWaitCursor(); }bool CMyProjectDlg::PaintDIB(HDC hDC, LPRECT lpDCRect, HDIB hDIB, LPRECT lpDIBRect, CPalette *pPal)
{ BITMAPINFO* lpDIBHdr; // BITMAPINFOHEADER指针
LPSTR lpDIBBits;// DIB象素指针
HPALETTE hPal=NULL; // DIB调色板
HPALETTE hOldPal=NULL; // 以前的调色板
BOOL bSuccess; // 判断DIB对象是否为空
if (hDIB == NULL)
{
// 返回
return FALSE;
}
lpDIBHdr=(BITMAPINFO*)new char(sizeof(BITMAPINFOHEADER));
// 锁定DIB
lpDIBBits = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
lpDIBHdr->bmiHeader=m_clrJpegDec.bi;
/* if (pPal != NULL)
{
hPal = (HPALETTE) pPal->m_hObject; // 选中调色板
hOldPal = ::SelectPalette(hDC, hPal, TRUE);
}
*/
// 设置显示模式
::SetStretchBltMode(hDC, COLORONCOLOR); // 判断是调用StretchDIBits()还是SetDIBitsToDevice()来绘制DIB对象
if ((RECTWIDTH(lpDCRect) == RECTWIDTH(lpDIBRect)) &&
(RECTHEIGHT(lpDCRect) == RECTHEIGHT(lpDIBRect)))
{
// 原始大小,不用拉伸。
bSuccess = ::SetDIBitsToDevice(hDC, // hDC
lpDCRect->left, // DestX
lpDCRect->top, // DestY
RECTWIDTH(lpDCRect), // nDestWidth
RECTHEIGHT(lpDCRect), // nDestHeight
lpDIBRect->right, // SrcX
(int)m_clrJpegDec.ImgHeight -
lpDIBRect->top, // SrcY
0, // nStartScan
(WORD)m_clrJpegDec.ImgHeight, // nNumScans
lpDIBBits, // lpBits
(LPBITMAPINFO)lpDIBHdr, // lpBitsInfo
DIB_RGB_COLORS); // wUsage
}
else
{
// 非原始大小,拉伸。
bSuccess = ::StretchDIBits(hDC, // hDC
lpDCRect->left, // DestX
lpDCRect->top, // DestY
RECTWIDTH(lpDCRect), // nDestWidth
RECTHEIGHT(lpDCRect), // nDestHeight
lpDIBRect->left, // SrcX
lpDIBRect->top, // SrcY
RECTWIDTH(lpDIBRect), // wSrcWidth
RECTHEIGHT(lpDIBRect), // wSrcHeight
lpDIBBits, // lpBits
(LPBITMAPINFO)lpDIBHdr, // lpBitsInfo
DIB_RGB_COLORS, // wUsage
SRCCOPY); // dwROP
}
// 解除锁定
::GlobalUnlock((HGLOBAL) hDIB);
/* // 恢复以前的调色板
if (hOldPal != NULL)
{
::SelectPalette(hDC, hOldPal, TRUE);
}
*/
// 返回
return true;}
BOOL CClrJpegDecode::ShowJpegToScreen(unsigned char *hJpegBuf, char *filename)这个函数是用来解码jpeg并转换成bmp的,哪位高手帮我看看到底是哪的问题,真不甚感激,我改了两天都没找到毛病错误显示是 应用程序发生异常unknow software exception(0X80000003)位置为0x7c92120e。