幫問問一下下面這段代碼有沒有錯(功能是是創建一個bmp,並對其進行文本輸出,最後想以bmp文件保存下來)

qingyidance 2001-12-06 07:27:36
幫問問一下下面這段代碼有沒有錯(功能是是創建一個bmp,並對其進行文本輸出,最後想以bmp文件保存下來)
完成之後怎樣以BMP文件的形勢存下來
short *init[4];
CClientDC dc(this);
CDC MemDC;
CDC *GetDC;
MemDC.CreateCompatibleDC(&DC);
CBitmap *bmp=new CBitmap;
bmp->CreateBitmap(8*80,16,1,1,init);
MemDC.SelectObject(&bmp);
MemDC.TextOut(0,0,strOutput);
...全文
53 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyidance 2001-12-07
  • 打赏
  • 举报
回复
我對圖形的東西實在是不了解,下面這段程序編譯沒有出錯,運行到***********處就停下來錯誤指示是“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;

}
Phourm 2001-12-06
  • 打赏
  • 举报
回复
bmp->CreateCompatibleBitmap(&dc,8*80,16);
qingyidance 2001-12-06
  • 打赏
  • 举报
回复
init 好像是錯的,但是我還沒有試過改過來的,有朋友願意指點嗎?/(^_^)\

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧