图像保存的程序,大家帮小弟我看下到底哪里出错了

图像保存的程序,大家帮我看下到底哪里出错了!
C/C++ code

           int nSize = 2616*1944; 
     int *color_r = new int[nSize];
     int *color_g = new int[nSize];
     int *color_b = new int[nSize];
这里的数据已经有了,大家不用考虑了主要是看下面的程序
////////////////////////////////////////////////

          COLORREF *pcf = new COLORREF[nSize]; 
    int *color_rgb = new int[nSize];
    for (i=0;i<1944;i++)   //高
    {        
        for (int j=0;j<2616;j++)    //宽
        {    
                          pDC->SetPixel(j,i,RGB(color_r[i*2616+j],color_g[i*2616+j],color_b[i*2616+j]));
                           //DC绘图,下面一句是把RGB保存到一个数组里面做数据

            pcf[i*2616+j] =RGB(color_r[i*2616+j],color_g[i*2616+j],color_b[i*2616+j]);
        }
    }
//[color=#FF0000]?? DC绘画的图片和通过已知像素值保存的图像,完全是两个不同的图片??[/color]

 //这里是保存图片

         CString bmpfile = "D:\\Change.bmp";     
    CFile File(bmpfile,CFile::modeCreate|CFile::modeWrite);   
    
    BITMAPFILEHEADER   bmfh;   
    bmfh.bfType=0x4d42;   
    bmfh.bfSize=54+2616*1944*3;   
    bmfh.bfReserved1=bmfh.bfReserved2=0;   
    bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);

    BITMAPINFOHEADER   bmih;   
    bmih.biWidth=2616;   
    bmih.biHeight=1944;   
    bmih.biPlanes=1;   
    bmih.biBitCount=24;   
    bmih.biCompression=BI_RGB;   
    bmih.biSizeImage=2616*1944*3;   
    bmih.biXPelsPerMeter=0;   
    bmih.biYPelsPerMeter=0;   
    bmih.biClrUsed=0;   
    bmih.biClrImportant=0;   
    bmih.biSize=sizeof(BITMAPINFOHEADER);   
    
    
    File.Write(&bmfh,sizeof(BITMAPFILEHEADER));   
    File.Write(&bmih,sizeof(BITMAPINFOHEADER));   
    File.Write(pcf,bmih.biSizeImage);




图片完全可以保存,就是DC绘画的图片和通过像素值保存的图片,完全是两个图片。理论上应该是一样。。。

请大家帮忙看下,是哪里出错了!!谢谢

在线等你们的热情的帮忙!!!

------解决方案--------------------
没细看,至少发现一处
COLORREF是4个字节
但是bmih.biBitCount=24;每像素3个字节。至少这儿就对应不起来。
------解决方案--------------------
C/C++ code

typedef DWORD COLORREF;