资源描述:
《C++读取设置图片RGB》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、CFilemyfile; myfile.Open(filename,CFile::modeRead
2、CFile::typeBinary); charbuff[GetLength+1]={0}; myfile.Read(buff,myfile.GetLength()); send(socket,buff,myfile.GetLength(),0); 读取RGBvoidReadBitMap(CStringstrFileName,intx,inty){CFilefile;if(!f
3、ile.Open(strFileName,CFile::modeRead
4、CFile::typeBinary)){return;}BITMAPFILEHEADERBitmapHead;if(file.Read(&BitmapHead,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)){return;}if(BitmapHead.bfType!=0x4d42){return;}BITMAPINFOHEADERBitmapInfo;if(file.Re
5、ad(&BitmapInfo,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER)){return;}if(BitmapInfo.biBitCount!=24){return;}DWORDdataByte=BitmapHead.bfSize-BitmapHead.bfOffBits;unsignedchar*pic_buf=(BYTE*)newchar[dataByte];BITMAPINFO*pic_pbmi=(BITMAPINFO*)newchar
6、[sizeof(BITMAPINFO)];memcpy(pic_pbmi,&BitmapInfo,sizeof(BITMAPINFOHEADER));intpic_rowSize=WidthBytes(pic_pbmi->bmiHeader.biWidth*24);if(file.Read(pic_buf,dataByte)!=dataByte){return;}file.Close();deletepic_buf;}pic_buf里存储的就是r,g,b值,buf[0]是r,buf[1]是g,buf[
7、2]是b的,这是第一个点的像素,下来buf[3]buf[4]buf[5]是第二个的,以此类推。 网上代码很多啊C/C++code CFilecf; if(!cf.Open(pathname,CFile::modeRead)) returnfalse; DWORDbitfilesize=cf.GetLength()-sizeof(BITMAPFILEHEADER);/////bitfilesize为除去文件头剩余文件的大小 unsignedchar*pbitfile=newuns
8、ignedchar[bitfilesize]; //////pbitfile指向了文件信息头的位置 if(!pbitfile) ////如果内存申请失败,就返回 returnfalse; BITMAPFILEHEADERbfh; if(cf.Read(&bfh,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER) //文件头读取 /*
9、
10、bfh.bfType!='BM'*/
11、
12、(cf.Read
13、(pbitfile,bitfilesize)!=bitfilesize)){//判断文件格式,和读取文件内容 ::MessageBox(NULL,_T("ERROR"),NULL,MB_OKCANCEL); delete[]pbitfile; ///读取失败,就删除申请的内存 return0; } if(m_pbmp!=NULL) /////防止多次载入图片,而导致内存的泄露 deletem_pbmp; if(m_palette.GetSa
14、feHandle()!=NULL) /////同上 m_palette.DeleteObject(); BITMAPINFOHEADER*pbih=(BITMAPINFOHEADER*)pbitfile;////pbih指向了文件信息头 m_bitid=pbih; /////付给了成员变量,m_biid指向了文件信息头 m_prq=(RGBQUAD*)&pbitfile[sizeof(BITMAPI