資源描述:
《保存MFC的CBitmap對象中的圖象到一個(gè)BMP文件中.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、保存MFC的CBitmap對象中的圖象到一個(gè)BMP文件中BOOLSaveBmp(HBITMAPhBitmap,CStringFileName)//FileName包括路徑和文件的全名//hBitmap=(HBITMAP)bm.GetSafeHandle(); CBitmapbm;{//設(shè)備描述表HDChDC;//當(dāng)前分辨率下每象素所占字節(jié)數(shù)intiBits;//位圖中每象素所占字節(jié)數(shù)WORDwBitCount;//定義調(diào)色板大小,位圖中像素字節(jié)大小,位圖文件大小,寫入文件字節(jié)數(shù)DWORDd
2、wPaletteSize=0,dwBmBitsSize=0,dwDIBSize=0,dwWritten=0;//位圖屬性結(jié)構(gòu)BITMAPBitmap; //位圖文件頭結(jié)構(gòu)BITMAPFILEHEADERbmfHdr; //位圖信息頭結(jié)構(gòu)BITMAPINFOHEADERbi; //指向位圖信息頭結(jié)構(gòu) LPBITMAPINFOHEADERlpbi; //定義文件,分配內(nèi)存句柄,調(diào)色板句柄HANDLEfh,hDib,hP
3、al,hOldPal=NULL;//計(jì)算位圖文件每個(gè)像素所占字節(jié)數(shù)hDC=CreateDC("DISPLAY",NULL,NULL,NULL);iBits=GetDeviceCaps(hDC,BITSPIXEL)*GetDeviceCaps(hDC,PLANES);DeleteDC(hDC);if(iBits<=1)wBitCount=1;elseif(iBits<=4)wBitCount=4;elseif(iBits<=8)wBitCount=8;elsewBitCount=24;GetObject(h
4、Bitmap,sizeof(Bitmap),(LPSTR)&Bitmap);bi.biSize=sizeof(BITMAPINFOHEADER);bi.biWidth=Bitmap.bmWidth;bi.biHeight=Bitmap.bmHeight;bi.biPlanes=1;bi.biBitCount=wBitCount;bi.biCompression=BI_RGB;bi.biSizeImage=0;bi.biXPelsPerMeter=0;bi.biYPelsPerMeter=0;bi.biClrImpo
5、rtant=0;bi.biClrUsed=0;dwBmBitsSize=((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight;//為位圖內(nèi)容分配內(nèi)存hDib=GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));lpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib);*lpbi=bi;//處理調(diào)色板 hPal=GetStockObject
6、(DEFAULT_PALETTE);if(hPal){hDC=::GetDC(NULL);hOldPal=::SelectPalette(hDC,(HPALETTE)hPal,FALSE);RealizePalette(hDC);}//獲取該調(diào)色板下新的像素值GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);//恢
7、復(fù)調(diào)色板 if(hOldPal){::SelectPalette(hDC,(HPALETTE)hOldPal,TRUE);RealizePalette(hDC);::ReleaseDC(NULL,hDC);}//創(chuàng)建位圖文件 fh=CreateFile(FileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL
8、FILE_FLAG_SEQUENTIAL_SCAN,NULL);if(fh==INVALID_HA
9、NDLE_VALUE) returnFALSE;//設(shè)置位圖文件頭bmfHdr.bfType=0x4D42;//"BM"dwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBit