我再ClientDC中已经绘制了图形,想以24位BMP保存下来
写了下面一段程序,可是总保存失败,打不开所保存的位图文件,
高手帮我看下
void CPainterView::OnFileSaveAs()
{ CFileDialog dlg(false); if(dlg.DoModal()==IDOK)
{
CPainterDoc* pDoc = GetDocument();
CString name=dlg.GetPathName();
MessageBox(name);
ofstream fout(name,ios::binary);

CClientDC dc(this);
RECT r;
this->GetClientRect(&r); int x=r.right-r.left+1;
int y=r.bottom-r.top+1;
int x1=x*3;
 x1=x1%4?(x1/4+1)*4:x1; char *data;
data=new char[x1*y];//一个CHAR型的数组
for(int i=0;i<y;i++)//先把所有的初始化为0,
{
for(int j=0;j<x1;j++)
{
data[j+i*x1]='0';
}
}
for(int i=0;i<y;i++)//取每个象素的颜色值,分别进行赋值
{
for(int j=0;j<x;j++)
{
COLORREF view=dc.GetPixel(j,y-1-i);

char red=(char)(view>>16);
char green=(char)(view>>8);
char blue=(char)view; 
     int k=(j+i*x)*3;
data[k]='2';
data[k+1]='255';
data[k+2]='3';
}
}
BITMAPFILEHEADER  bh; 
BITMAPINFOHEADER   bi;   bh.bfOffBits=sizeof(bh)+sizeof(BITMAPINFOHEADER);
bh.bfReserved1=0;
bh.bfReserved2=0;
bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+x1*y;
bh.bfType='BM'; bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=(long)x;
bi.biHeight=(long)y;
bi.biPlanes=1;
bi.biBitCount=24;
bi.biCompression=0;
bi.biSizeImage=sizeof(BITMAPFILEHEADER)+sizeof  (BITMAPINFOHEADER)+x1*y; fout.write((char*)&bh,sizeof(bh));
fout.write((char*)&bi,sizeof(bi));
fout.write(data,x1*y);
fout.close(); }