各位大大 帮我看看MFC保存图片
CTime T = CTime::GetCurrentTime();
CString TestDate = T.Format("%Y年%m月%d日%H%M%S");
TestDate +=".bmp";
CDC MemDC;
CWnd *pWnd = GetDlgItem(IDC_STATIC10);
HWND hwnd = pWnd->GetSafeHwnd();
HDC hdc=::GetDC(hwnd);
CDC *pDC = CDC::FromHandle(hdc);
MemDC.CreateCompatibleDC(pDC);
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL,TestDate,IMAGE_BITMAP,800,600,LR_LOADFROMFILE);//该函数装载图标,光标,或位图
MemDC.SelectObject(hBitmap);
MemDC.TextOut(20,20,TestDate);
WORD wbitsCount;
DWORD dwpalettelsize = 0;
DWORD dwbmdibitsize,dwdibsize,dwwritten;
BITMAP bitmap;
BITMAPFILEHEADER bmfhdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh,fdib;
GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
wbitsCount = bitmap.bmBitsPixel;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bitmap.bmWidth;
bi.biHeight = bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = bitmap.bmBitsPixel ;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biYPelsPerMeter = 0;
bi.biXPelsPerMeter = 0;
if(wbitsCount<= 8)dwpalettelsize = (1<<wbitsCount)*sizeof(RGBQUAD);
dwbmdibitsize = ((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
fdib = GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)::GlobalLock(fdib);
lpbi = &bi;//将bi中的数据写入分配的内存中。
GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
fh = CreateFile(TestDate,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(fh == INVALID_HANDLE_VALUE)
return ;
bmfhdr.bfType = 0x4d42;
dwdibsize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
bmfhdr.bfSize = dwdibsize;
bmfhdr.bfReserved1 = 0;
bmfhdr.bfReserved2 = 0;
bmfhdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
::GlobalUnlock(fdib);
::GlobalFree(fdib);
::CloseHandle(fh);
ReleaseDC(pDC);
AfxMessageBox("保存图片成功");
return ;
这是我写的代码,图片可以保存,但是打开保存的图片提示文件损坏,各位大大帮我看看,是不是我的代码有问题,还是别的问题。谢谢各位了 ~!!!
[解决办法]
http://blog.csdn.net/visualeleven/article/details/6202796
参考一下这个,希望对你有帮助