Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void SaveBitmap(char *szFilename,HBITMAP hBitmap)
- {
- HDC hdc=NULL;
- FILE* fp=NULL;
- DWORD* pBuf=NULL;
- BITMAPINFO bmpInfo;
- BITMAPFILEHEADER bmpFileHeader;
- HANDLE hHeap;
- do{
- hdc=GetDC(NULL);
- ZeroMemory(&bmpInfo,sizeof(BITMAPINFO));
- bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- GetDIBits(hdc,hBitmap,0,0,NULL,&bmpInfo,DIB_RGB_COLORS);
- if(bmpInfo.bmiHeader.biSizeImage<=0)
- bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth*abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8;
- hHeap = GetProcessHeap();
- if((pBuf = (DWORD*)HeapAlloc(hHeap, 0, bmpInfo.bmiHeader.biSizeImage))==NULL)
- {
- //MessageBox( NULL, "Unable to Allocate Bitmap Memory",
- break;
- }
- bmpInfo.bmiHeader.biCompression=BI_RGB;
- GetDIBits(hdc,hBitmap,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo,
- DIB_RGB_COLORS);
- if((fp = fopen(szFilename,"wb"))==NULL)
- {
- //MessageBox( NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR);
- break;
- }
- bmpFileHeader.bfReserved1=0;
- bmpFileHeader.bfReserved2=0;
- bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage;
- bmpFileHeader.bfType='MB';
- bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
- fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
- fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
- fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp);
- }while(false);
- if(hdc) ReleaseDC(NULL,hdc);
- if(pBuf) free(pBuf);
- if(fp) fclose(fp);
- }
Add Comment
Please, Sign In to add comment