读书人

图像保存的程序大家帮小弟我看下到底

发布时间: 2012-01-20 18:53:53 作者: rapoo

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

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; 

读书人网 >VC/MFC

热点推荐