(一)VC保存和显示数据库图像(BMP)
2010-11-17 22:29
405 查看
源码下载:
程序运行界面显示如下:
![](http://hi.csdn.net/attachment/201011/17/0_129000380143t2.gif)
简述关键代码如下:
1、保存图片数据到数据库
其中SetPictureToVariant如下:
2、从数据库读取图像文件并且显示在界面
上次写了两篇关于在VC界面显示图片(BMP、JPG)的文章,但是并没有涉及到数据库,所以这次补写了这两篇有关数据库的文章,这两篇文章用的是access的数据库,其它的数据库操作道理是一样的。
具体的程序请参考附带的例子,例子里面有详细的注释。
程序运行界面显示如下:
![](http://hi.csdn.net/attachment/201011/17/0_129000380143t2.gif)
简述关键代码如下:
1、保存图片数据到数据库
以下是代码片段: //BMP图片保存到数据库 try { _RecordsetPtr pRecordset; pRecordset.CreateInstance(__uuidof(Recordset)); pRecordset->Open("SELECT * FROM bmp",_variant_t((IDispatch*)pConnection),adOpenStatic,adLockOptimistic,adCmdText); pRecordset->AddNew(); pRecordset->Fields->Item["bmpid"]->Value = (_variant_t)m_BMPId; //bmpid VARIANT pvList; SetPictureToVariant(pvList,(unsigned char *)m_pBMPBuffer); pRecordset->Fields->Item["bmpimage"]->AppendChunk(pvList); //BMP图像文件 VariantClear(&pvList); pRecordset->Update(); pRecordset->Close(); AfxMessageBox("BMP图像保存成功!"); } catch(...) { AfxMessageBox("数据库读取失败"); return; } |
以下是代码片段: void CBMPinDBDlg::SetPictureToVariant(VARIANT &pvList, unsigned char *sPicture) { SAFEARRAYBOUND saBound[1]; saBound[0].cElements = m_nFileLen; saBound[0].lLbound = 0; SAFEARRAY *pSA = SafeArrayCreate(VT_UI1, 1, saBound); for (long l = 0; l < (long)m_nFileLen; l ++) { SafeArrayPutElement( pSA, &l, (void*)&sPicture[l]); } VariantClear(&pvList); pvList.vt = VT_UI1 | VT_ARRAY; pvList.parray = pSA; } |
以下是代码片段: //从数据库里取BMP图像文件 try { _RecordsetPtr pRecordset; char sSql[129]; sprintf(sSql,"SELECT *FROM bmp WHERE bmpid=’%s’",m_BMPId); pRecordset.CreateInstance(__uuidof(Recordset)); pRecordset->Open(sSql,_variant_t((IDispatch*)pConnection),adOpenStatic,adLockOptimistic,adCmdText); if (pRecordset->adoEOF) { CString str; str.Format("没有BMPid为: %s 的BMP图像!",m_BMPId ); AfxMessageBox(str); DestroyPhoto(); Invalidate(); m_BMPId = ""; UpdateData(false); m_EidtBMPId.SetFocus(); return; } _variant_t pvList ; long lDataSize = pRecordset->GetFields()->GetItem("bmpimage")->ActualSize; m_nFileLen = (DWORD)lDataSize; if(lDataSize > 0) { _variant_t varBLOB; varBLOB = pRecordset->GetFields()->GetItem("bmpimage")->GetChunk(lDataSize); //把二进制格式的图片转为图片格式 if(varBLOB.vt == (VT_ARRAY | VT_UI1)) { if(m_pBMPBuffer = new char[lDataSize+1]) { char *pBuf = NULL; SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); memcpy(m_pBMPBuffer,pBuf,lDataSize); SafeArrayUnaccessData (varBLOB.parray); m_nFileLen = lDataSize; m_hBitmap = BufferToHBITMAP(); Invalidate();//在界面显示 } } } } catch(...) { AfxMessageBox("数据库读取失败"); return; } |
上次写了两篇关于在VC界面显示图片(BMP、JPG)的文章,但是并没有涉及到数据库,所以这次补写了这两篇有关数据库的文章,这两篇文章用的是access的数据库,其它的数据库操作道理是一样的。
具体的程序请参考附带的例子,例子里面有详细的注释。
相关文章推荐
- VC保存和显示数据库图像(BMP)
- VC保存和显示数据库图像(BMP)
- VC保存和显示数据库图像(BMP)
- VC保存和显示数据库图像(JPG、JPEG)
- VC保存和显示数据库图像(JPG、JPEG)
- VC保存和显示数据库图像(JPG、JPEG)
- VC保存和显示数据库图像(JPG、JPEG)
- 将开发板中显示的图像保存为bmp
- VC下显示JPG,BMP,GIF等图像格式
- bmp图像读取显示保存问题
- VC数字图像处理编程讲座之四--BMP图像显示的特效操作
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- VC下显示JPG,BMP,GIF等图像格式
- OpenCV显示摄像头图像保存成bmp文件
- VC 中BMP、JPG、GIF图像的显示
- VC++创建BMP图像且保存
- VC中导入图像(BMP,JPG,GIF)并显示的方法
- VC 中BMP、JPG、GIF图像的显示
- VC++ 2005中显示jpg,bmp,gif图像的方法
- 用VC在 数据库表里增加一个字段读出,然后显示、保存