vc中读取图片内容总是不对,高手帮小弟我看一看,多谢
vc中读取图片内容总是不对,高手帮我看一看,谢谢!
点一个加载附件的按钮,然后选取所需图片:
void CForwardReq::AddAdjunct() //添加附件
{
unsigned int filelen; //附件的大小
char pMMbody[1024*1024]; 附件的内容体
static char BASED_CODE szFilter[] = "Media Files (*.jpg)|*.jpg|Media Files (*.bmp)|*.bmp|Media Files (*.gif)|*.gif|Media Files (*.mid)|*.mid|Media Files (*.wav)|*.wav|Media Files (*.*)|*.*| ";
CFileDialog dlg(TRUE, "*.* ", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,szFilter);
if(dlg.DoModal() == IDOK)
{
POSITION pos;
pos = dlg.GetStartPosition();
CString filename;
while(pos)
{
//pBuff = pReservBuff;
if(!(filename = dlg.GetNextPathName(pos)))
break;
CFile file;
if(!file.Open(filename,CFile::modeRead|CFile::typeBinary,NULL))
{
AfxMessageBox( "文件操作出错! ");
return;
}
filelen = file.GetLength();
if(filelen > MMBODY_MAX_LEN){
AfxMessageBox( "附件过大 ");
return;
}
file.Read(pMMbody,filelen);//读入所添加的附件内容
int aaa = lstrlen(pMMbody);
file.Close();
}
}
}
------------------------------------------
该程序读文本的时候没问题,int aaa = lstrlen(pMMbody); aaa的大小与文本的大小一致。 但附件为图片的时候就不对了,aaa的值为4,图片实际大小为96k了,这是为什么??
------解决方案--------------------
lstrlen~?????来对图片取大小~???有这么个做法的吗~???好好看看图片的格式吧``
还有楼上的,error C2018: unknown character '0xb8 ' "
是你拷来的有中有一个字符是不对的,那一行你看看哪里有字符是错的,不是英文的输入输入的也会这样的````
------解决方案--------------------
了解下二进制文件与文本文件! 图片的读取是二进制的
------解决方案--------------------
lstrlen(pMMbody);
这个计算的是pMMbody中到第一个字符为0x0的长度.也就是只能取文本文件的长度.
直接
int aaa = filelen; 就可以了
------解决方案--------------------
首先你这个缓冲区固定大小了,如果超出就会造成缓冲区溢出。最好用指针动态分配。
其次获取读取读取的数据大小可以:
int aaa = file.Read(pMMbody,filelen);//读入所添加的附件内容
aaa中就是实际读取的字节数。
点一个加载附件的按钮,然后选取所需图片:
void CForwardReq::AddAdjunct() //添加附件
{
unsigned int filelen; //附件的大小
char pMMbody[1024*1024]; 附件的内容体
static char BASED_CODE szFilter[] = "Media Files (*.jpg)|*.jpg|Media Files (*.bmp)|*.bmp|Media Files (*.gif)|*.gif|Media Files (*.mid)|*.mid|Media Files (*.wav)|*.wav|Media Files (*.*)|*.*| ";
CFileDialog dlg(TRUE, "*.* ", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,szFilter);
if(dlg.DoModal() == IDOK)
{
POSITION pos;
pos = dlg.GetStartPosition();
CString filename;
while(pos)
{
//pBuff = pReservBuff;
if(!(filename = dlg.GetNextPathName(pos)))
break;
CFile file;
if(!file.Open(filename,CFile::modeRead|CFile::typeBinary,NULL))
{
AfxMessageBox( "文件操作出错! ");
return;
}
filelen = file.GetLength();
if(filelen > MMBODY_MAX_LEN){
AfxMessageBox( "附件过大 ");
return;
}
file.Read(pMMbody,filelen);//读入所添加的附件内容
int aaa = lstrlen(pMMbody);
file.Close();
}
}
}
------------------------------------------
该程序读文本的时候没问题,int aaa = lstrlen(pMMbody); aaa的大小与文本的大小一致。 但附件为图片的时候就不对了,aaa的值为4,图片实际大小为96k了,这是为什么??
------解决方案--------------------
lstrlen~?????来对图片取大小~???有这么个做法的吗~???好好看看图片的格式吧``
还有楼上的,error C2018: unknown character '0xb8 ' "
是你拷来的有中有一个字符是不对的,那一行你看看哪里有字符是错的,不是英文的输入输入的也会这样的````
------解决方案--------------------
了解下二进制文件与文本文件! 图片的读取是二进制的
------解决方案--------------------
lstrlen(pMMbody);
这个计算的是pMMbody中到第一个字符为0x0的长度.也就是只能取文本文件的长度.
直接
int aaa = filelen; 就可以了
------解决方案--------------------
首先你这个缓冲区固定大小了,如果超出就会造成缓冲区溢出。最好用指针动态分配。
其次获取读取读取的数据大小可以:
int aaa = file.Read(pMMbody,filelen);//读入所添加的附件内容
aaa中就是实际读取的字节数。