读取一个BMP文件内容,然后在存放在另一个MBP文件里的有关问题

读取一个BMP文件内容,然后在存放在另一个MBP文件里的问题
如题:
(1)新建2个BMP文件333.bmp和222.bmp,然后用画图工具在333.bmp中画上几跟线条.
(2)然后用文件操作把333.bmp的相关信息读取并存放到数组中.
(3)最后在用文件操作把读取的相关信息写入到222.bmp中.

问题出现了:
(1)第1步过后,333.bmp的文件大小为729K,但把从333.bmp中读取的相关信息写入到222.bmp中后,222.bmp文件只有244K.
(2)用画图工具打开222.bmp,出现提示 "绘图失败 ".

相关代码如下:
    unsigned       char       TMPBUF[256];
    UINT32       *palette;
    unsigned       char       *bmpdata;
    long       TotalColumns;      
    long       TotalRows;      
    long       TotalBytes;  
void   CFileView::OnFile()  
{

  FILE       *fp_bitmap=fopen( "222.bmp ", "wb ");    
                fwrite(TMPBUF,1,54,fp_bitmap);      
                fwrite(palette,4,256,fp_bitmap);      
                fwrite(bmpdata,1,(size_t)TotalBytes,fp_bitmap);      
                fclose(fp_bitmap);

}

void   CFileView::OnRfile()
{
FILE       *fp_bitmap=fopen( "333.bmp ", "rb ");      
                fread(TMPBUF,1,54,fp_bitmap);    
                palette=(UINT32       *)malloc(sizeof(UINT32[256]));      
                fread(palette,4,256,fp_bitmap);  

                TotalRows=(unsigned       short       int)TMPBUF[19]*256+(unsigned       short       int)TMPBUF[18];  
   
                TotalColumns=(unsigned       short       int)TMPBUF[23]*256+(unsigned       short       int)TMPBUF[22];

                TotalBytes=TotalColumns*TotalRows;    
                unsigned   char   *   buffer=(unsigned       char       *)(malloc(TotalBytes));  

                bmpdata=buffer;
                for(int       i=0;i <TotalRows;i++)    
            {
                        fread(buffer,1,TotalColumns,fp_bitmap);
      buffer   =   buffer+(TotalColumns-1);
            }
fclose(fp_bitmap);
}


如我要在222.bmp文件中正确显示333.bmp的内容,需要修改那些地方.
望高人指点!

------解决方案--------------------
bmp文件结构
1、BITMAPFILEHEADER
2、BITMAPINFO
3、data

222.bmp文件中没有1和2,不是正常的位图文件
------解决方案--------------------
帮顶,期待高人