谢谢
解决方案 »
- MoveFile 函数奇怪的问题
- 散分 散分 散分 为过节 散分
- VS2005类属性页里面的“事件”、“消息”、“重写”不见了!!
- 模态对话框調用Domodal()後不能正常弹出,有时要按键盘上的Alt键才能正常弹出,怎么解决这个问题?
- DnsQuery()函数在xp下返回1460错误,这是为什么,而在2000下运行正常。
- 微软欲抛弃Windows设计模式 重点推“长角”
- 关于installshield问题
- Vista系统中 用户会话何时将会处于锁定状态?(希望完整的列出)
- 用winsock实现http的get请求,返回的文本中,中文全是乱码,怎么破。
- 在ATL中怎么实现异常处理
- 谁能帮我把这个EXE文件里的2句话去掉啊
- 关于XmlDocument的save方法
然后在你抓完图后添加如下代码m_pRecordset->GetFields()->GetItem("照片")->ActualSize;
这段代码是读取照片
void CAddRelationInfo::SetFileToDb(_RecordsetPtr &recPtr, CString strPath)
{
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
//VT_ARRAY | VT_UI1
CFile f(strPath.operator LPCTSTR(),CFile::modeRead);
BYTE bVal[ChunkSize+1];
long uIsRead=0;
//Create a safe array to store the array of BYTES
while(1)
{
//读取照片
uIsRead=f.Read(bVal,ChunkSize);
if(uIsRead==0)break;
rgsabound[0].cElements =uIsRead;
rgsabound[0].lLbound = 0;
///创建SAFEARRAY对象
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for(long index=0;index<uIsRead;index++)
{
if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))
::MessageBox(NULL,"错误。","提示",MB_OK | MB_ICONWARNING);
}
//为varChunk变量赋值
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
//加入BLOB类型的数据
try{
recPtr->Fields->GetItem("照片")->AppendChunk(varChunk);
}
catch (_com_error &e)
{
CString str=(char*)e.Description();
::MessageBox(NULL,str+"\n错误。","提示",MB_OK | MB_ICONWARNING);
}
::VariantClear(&varChunk);
::SafeArrayDestroyData( psa);
if(uIsRead<ChunkSize)break;
}
f.Close();
}
调用:SetFileToDb(m_pRecordset,m_strPhotoPath);
m_strPhotoPath是图片的路径
http://www.vckbase.com/document/viewdoc/?id=719
http://www.vckbase.com/document/viewdoc/?id=252
对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:
_variant_t GetChunk (long Length );
给出数据的长度后GetChunk将返回包含数据的VARIANT类型变量,然后我们可以利用SafeArrayAccessData函数得到VARIANT变量中指向数据的char *类型的指针,以方便我们的处理,具体代码如下:long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;///得到数据的长度
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正确
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); ///得到指向数据的指针
/*****在这里我们可以对pBuf中的数据进行处理*****/
SafeArrayUnaccessData (varBLOB.parray);
}
}
HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO,
DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
将图像二进制序列保存到lpBitmapBits byte数组中。
然后加上 位图 BITMAPFILEHEADER BITMAPINFOHEADER 信息 一起保存到数据库中。