C++读取设置图片RGB.doc
文本预览下载声明
CFile myfile;? ? ? ? myfile.Open(filename,CFile::modeRead|CFile::typeBinary);? ? ? ? char buff[GetLength+1] = {0};? ? ? ? myfile.Read(buff,myfile.GetLength());
?? ? ? ?send(socket,buff,myfile.GetLength(),0);
?
读取RGB
void ReadBitMap( CString strFileName , int x , int y ){CFile file;if(!file.Open(strFileName,CFile::modeRead|CFile::typeBinary)){return;}BITMAPFILEHEADER BitmapHead;if(file.Read(BitmapHead,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)){return;}if(BitmapHead.bfType!=0x4d42){return;}BITMAPINFOHEADER BitmapInfo;if(file.Read(BitmapInfo,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER)){return;}if(BitmapInfo.biBitCount!=24){return;}DWORD dataByte=BitmapHead.bfSize-BitmapHead.bfOffBits;unsigned char* pic_buf = (BYTE*)new char[dataByte];BITMAPINFO* pic_pbmi = (BITMAPINFO*)new char[sizeof(BITMAPINFO)];memcpy(pic_pbmi,BitmapInfo,sizeof(BITMAPINFOHEADER));int pic_rowSize = WidthBytes(pic_pbmi-bmiHeader.biWidth*24);if(file.Read(pic_buf ,dataByte)!=dataByte){return;}file.Close();delete pic_buf;}pic_buf里存储的就是r,g,b值,buf[0] 是r,buf[1]是g,buf[2]是b的,这是第一个点的像素,下来buf[3] buf[4] buf[5]是第二个的,以此类推。
?网上代码很多啊
C/C++ code
?? ?CFile cf;
?? ?if(!cf.Open(pathname,CFile::modeRead))
?? ? ? ?return false;
?? ?DWORD bitfilesize=cf.GetLength()-sizeof(BITMAPFILEHEADER);/////bitfilesize为除去文件头剩余文件的大小
?? ?unsigned char* pbitfile=new unsigned char[bitfilesize]; ? ?//////pbitfile指向了文件信息头的位置 ? ?
?? ?if(!pbitfile) ? ? ? ? ? ? ? ? ? ? ? ? ? ?////如果内存申请失败,就返回
?? ? ? ?return false;
?? ?BITMAPFILEHEADER bfh;
?? ?if(cf.Read(bfh,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER) ?//文件头读取
?? ? ? ?/*||bfh.bfType!=BM*/||(cf.Read(pbitfile,bitfilesize)!=bitfilesize)){//判断文件格式,和读取文件内容
?? ? ? ? ? ?::MessageBox(NULL,_T(ERROR),NULL,MB_OKCANCEL);
?? ? ? ? ? ?delete []pbitfile; ? ? ? ///读取失败,就删除申请的内存
?? ? ? ? ? ?return 0;
?? ?}
?? ?if(m_pbmp!=NULL) ? ?/////防止多次载入图片,而导致内存的泄露
?? ? ? ?delete m_pbmp;
?? ?if(m_palette.GetSafeHandle ()!=NULL) ?/////同上
?? ? ? ?m_palette.Del
显示全部