高分懸賞,各位兄弟快救我!這是一段完整的輸出text到bmp的程序,其中有一些錯錯誤,幫幫忙改一下吧,我要瘋了
我對圖形的東西實在是不了解,下面這段程序編譯沒有出錯,運行到***********處就停下來錯誤指示是“insert error”,我只是想把這個程序寫成創建一個單色bitmap,對圖形進行文本輸出,然後以bmp文件的格式保存下來,但是結果這麽簡單的東西我做了那麽久,還是沒有做出來~!~
真實生氣啊,快!兄弟們,給點意見!
void CDirectTtoBDlg::OnOK()
{
CString strtext="這是一個轉換程序!";
CClientDC dc(this);
CDC memorydc;
memorydc.CreateCompatibleDC(&dc);
CBitmap *bitmap=new CBitmap;
bitmap->CreateCompatibleBitmap(&dc,8*80,16);
memorydc.SelecObject(bitmap);
memorydc.TextOut(0,0,strtext);
HDC hWndDC; //下面這幾行關於hDC我覺得錯了,但是不知道怎麽改?
hWndDC=CreateDC("Display",NULL,NULL,NULL);
HBITMAP hBitmap=(HBITMAP)bitmap;
CFileDialog FileDialog(False,"bmp",NULL,OFN_HIDEREAONLY,"所有文件*.*|*.*||",NULL);
if(FileDialog.Domodal()==IDOK)
{
CString strFilePath=FileDialog.GetPathName;
strFileName=FileDIalog.GetFileName;//strFileName在頭文件裏頭已經定義,CString型
SaveBitmapToFile(hBitmap,strFileName,hWndDC());
}
else return;
CDialog::OnOK();
}
BOOL CDireatTtoB::SaveBitmapToFile(HBITMAP hBitmap,LPCTSTR lpFileName,HDC hWndDC)
{
HDC hDC;
int iBits;
WORD wBitCount;
DWORD dwPaletteSize=0,
dwBmBitsSize=0,dwDIBSize,dwWritten;
BITMAP Bitmap;
BITMAPFILEHEADER bmfHdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh,hDib,hPal,hOldPal=NULL;
hDC=::CeateCompatibleDC();
lBits=GetDeviceCapes(hDC,BITSPIXEL)*GetDeviceCaps(hDC,PLANES);
DeleteDC(hDC);
if(iBits<=1)
wBitCount=1;
else if(iBits<=4)
wBitCount=4;
else if(iBits<=8)
wBitCount=8;
else if(iBits<=24)
wBitCount=24;
else
wBitCount=24;
if(wBitCount<=8)
dwPaltteSize=(1<<wBitCount)*sizeof(RGBQUAD);
GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);
bi.biSize=sizeof(BITMAPINFOHEAER);
bi.biWidth=Bitmap.bmWidth;
bi.biHeight=Bitmap.bmHeight;
bi.biPlanes=1,
bi.biBitCount=wBitCount;
bi.biCompression=BI_RGB;
bi.biSizeImag=0;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0;
dwBmBitsSize=((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight;
//為位圖分配内存
hDib=GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi=GlobalAlloc(LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi=bi;****************************************************************
hPal=GetStockObject(DEFAULT_PALETTE);
if(hPal)
{
hDC=::GetDC(NULL);
hOldPal=::SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(HDC);
}
GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEAER)+
dwPaletteSize,(LPBITMAPINFO)lpbi,DIB_RGB_COLORS);
SelectPalette(hDC,(HPALETTE)hOldPal,FALSE);
RealisePalette(hDC);
::ReleaseDC(NULL,hDC);
}
fh=CreateFile(lpFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTAL_SCAN,NULL);
if(fh==NULL)
return FALSE;
bmfHdr.bfType=0x4D42;
dwfHdr.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+wPaletteSize+dwBmBitsSize;
bmfHdr.bfSize=dwDIBSize;
bmfHdr.bfReserved1=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+
dwPaletteSize;
WriteFile(fh,(LPSTR)BITMAPFILEHEADER),&dwWritten,NULL);
WriteFile(fh,(LPSTR)lpbi,dwDIBSize,&wWritten,NULL);
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
--------------------------------------------------------------------------------