为什么我这样保存不了图片?
为什么这么不行呢?这个是把自己画的图片存成bmp文件
下面这个程序不行雅,怎么搞的,我要疯了
大家帮帮忙雅
BOOL CMydibView::DIB_SaveImage(LPCTSTR lpszName)
{
CWnd *pWnd=AfxGetApp()->GetMainWnd();
CClientDC dc(pWnd);
CDC memDC;
GetClientRect(Rect);
memDC.CreateCompatibleDC(&dc);
bitmap.CreateCompatibleBitmap(&dc,Rect.Width(),Rect.Height());
memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,Rect.Width(),Rect.Height(),&dc,Rect.left,Rect.top,SRCCOPY);
//保存
BITMAP bmp; //
PBITMAPINFO pbmi;//
WORD cClrBits;
GetObject(bitmap,sizeof(BITMAP),(LPSTR)&bmp);
cClrBits=(WORD)(bmp.bmPlanes*bmp.bmBitsPixel);
if(cClrBits==1)
cClrBits=1;
else if(cClrBits<=4)
cClrBits=4;
else if(cClrBits<=8)
cClrBits=8;
else if(cClrBits<=16)
cClrBits=16;
else if(cClrBits<=24)
cClrBits=24;
else
cClrBits=32;
if(cClrBits==24)
pbmi=(PBITMAPINFO)LocalAlloc(LPTR,sizeof(BITMAPINFOHEADER)+
sizeof(RGBQUAD)*cClrBits);
else
pbmi=(PBITMAPINFO)LocalAlloc(LPTR,sizeof(BITMAPINFOHEADER));
pbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biWidth=bmp.bmWidth;
pbmi->bmiHeader.biHeight=bmp.bmHeight;
pbmi->bmiHeader.biPlanes=bmp.bmPlanes;
pbmi->bmiHeader.biBitCount=bmp.bmBitsPixel;
pbmi->bmiHeader.biCompression=BI_RGB;
pbmi->bmiHeader.biSizeImage=(pbmi->bmiHeader.biWidth+7)/8
*pbmi->bmiHeader.biHeight*cClrBits;
pbmi->bmiHeader.biClrImportant=0;
PBITMAPINFOHEADER pbih;//文件头信息
BITMAPFILEHEADER hdr; //文件的头
HANDLE hf; //文件句柄
// HANDLE hmem; //内存句柄
LPBYTE lpBits; //内存指针
DWORD dwTotal; //总字节数
DWORD cb;
BYTE *hp;
DWORD dwTmp;
pbih=(PBITMAPINFOHEADER)pbmi;
lpBits=(LPBYTE)GlobalAlloc(GMEM_FIXED,pbih->biSizeImage);
//从BMP中取颜色表
GetDIBits(dc.GetSafeHdc(),bitmap,0,
(WORD)pbih->biHeight,lpBits,pbmi,DIB_RGB_COLORS);
//创建BMP文件
hf=CreateFile(_T(lpszName),
GENERIC_READ|GENERIC_WRITE,
(DWORD)0,
(LPSECURITY_ATTRIBUTES)NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL);
hdr.bfType=0x4d42;
//计算整个文件的大小
hdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+
pbih->biSize+pbih->biClrImportant*
sizeof(RGBQUAD)+pbih->biSizeImage);
hdr.bfReserved1=0;
hdr.bfReserved2=0;
hdr.bfOffBits=(DWORD)(sizeof(BITMAPFILEHEADER)+
pbih->biSize+pbih->biClrImportant*sizeof(RGBQUAD));
//写BITMAPFILEHEADER 到BMP文件
WriteFile(hf,(LPVOID)&hdr,sizeof(BITMAPFILEHEADER)+
pbih->biClrImportant*sizeof(RGBQUAD),
(LPDWORD)&dwTmp,(LPOVERLAPPED)NULL);
//写颜色到BMP文件
dwTotal=cb=pbih->biSizeImage;
hp=lpBits;
if(hf)
{
DWORD write;
WriteFile(hf,(LPSTR)hp,dwTotal,&write,NULL);
CloseHandle(hf);
return true;
}
return(true);
}