图像保存的程序,大家帮小弟我看下到底哪里出错了
图像保存的程序,大家帮我看下到底哪里出错了!
图片完全可以保存,就是DC绘画的图片和通过像素值保存的图片,完全是两个图片。理论上应该是一样。。。
请大家帮忙看下,是哪里出错了!!谢谢
在线等你们的热情的帮忙!!!
------解决方案--------------------
没细看,至少发现一处
COLORREF是4个字节
但是bmih.biBitCount=24;每像素3个字节。至少这儿就对应不起来。
------解决方案--------------------
- 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;