if (nsave!=0)
{
BITMAP mbitmap;
MemBitmap.GetBitmap(&mbitmap);
BITMAPINFOHEADER bih = {0};//位圖資訊頭
bih.biBitCount = mbitmap.bmBitsPixel;//每個像素位元組大小
bih.biCompression = BI_RGB;
bih.biHeight = mbitmap.bmHeight;//高度
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = mbitmap.bmWidthBytes * mbitmap.bmHeight;//影像資料大小
bih.biWidth = mbitmap.bmWidth;//寬度
BITMAPFILEHEADER bfh = {0};//位圖檔案頭
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位圖資料的偏移量
bfh.bfSize = bfh.bfOffBits + mbitmap.bmWidthBytes * mbitmap.bmHeight;//檔案總的大小
bfh.bfType = (WORD)0x4d42;
byte * p = new byte[mbitmap.bmWidthBytes * mbitmap.bmHeight];//申請記憶體保存位圖資料
GetDIBits(MemDC.m_hDC,(HBITMAP)MemBitmap.m_hObject,0,high,p,(LPBITMAPINFO)&bih,DIB_RGB_COLORS);//獲取位圖資料
CString strFileName,strszFilter,strFileName2;
strszFilter="位圖檔案(*.bmp)|*.bmp|全部檔案(*.*)|*.*||";
strFileName2.Format("%d.bmp",nsave);
strFileName = path;
strFileName +=strFileName2;
char filename[MAX_PATH];
strcpy(filename,strFileName);
FILE *fp = fopen(filename, "w+b");
fwrite(&bfh, sizeof(BITMAPFILEHEADER),1, fp);//寫入位圖檔案頭
fwrite(&bih, sizeof(BITMAPINFOHEADER),1, fp);//寫入位圖資訊頭
fwrite(p, 1, mbitmap.bmWidthBytes * mbitmap.bmHeight, fp);//寫入位圖資料
fclose(fp);
delete [] p;
}
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
uj5u.com熱心網友回復:
FILE *fp = fopen(filename, "w+b");if(fp) //先判斷檔案打開有效
{
}
設定斷點 單步除錯運行 看看哪一步奔潰?
uj5u.com熱心網友回復:
fwrite(&bfh, sizeof(BITMAPFILEHEADER),1, fp);//寫入位圖檔案頭fwrite(&bih, sizeof(BITMAPINFOHEADER),1, fp);//寫入位圖資訊頭
就是這兩部分
uj5u.com熱心網友回復:
FILE *fp = fopen(filename, "w+b");->
FILE *fp = fopen(filename, "wb");
uj5u.com熱心網友回復:
如果還有問題,檢查一下filename的值是多少。uj5u.com熱心網友回復:
恩,確實是檔案沒打開。謝謝各位大佬了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/88173.html
標籤:基礎類
