从数据库中读写图片
来源:互联网 发布:淘宝卖家怎么开通达人 编辑:程序博客网 时间:2024/05/22 15:58
写图片进数据库(SQL Server 2000):
DWORD m_nFileLen;
char *m_pBMPBuffer;
BOOL m_bNewUser;
CFile file;
if( !file.Open( "D:/MAP.bmp", CFile::modeRead) )
return ;
m_nFileLen = file.GetLength();
m_pBMPBuffer = new char[m_nFileLen + 1];
if(!m_pBMPBuffer)
return ;
if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)
return ;
CADOConn m_all;
_RecordsetPtr m_pRecordset;
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset = m_all.GetRecordSet((_bstr_t)("SELECT * FROM TroubleInfo"));
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Number",_variant_t("1"));
m_pRecordset->PutCollect("Status",_variant_t("T"));
if(pBuf)
...{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("Picture")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
char *m_pBMPBuffer;
BOOL m_bNewUser;
CFile file;
if( !file.Open( "D:/MAP.bmp", CFile::modeRead) )
return ;
m_nFileLen = file.GetLength();
m_pBMPBuffer = new char[m_nFileLen + 1];
if(!m_pBMPBuffer)
return ;
if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)
return ;
CADOConn m_all;
_RecordsetPtr m_pRecordset;
char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset = m_all.GetRecordSet((_bstr_t)("SELECT * FROM TroubleInfo"));
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Number",_variant_t("1"));
m_pRecordset->PutCollect("Status",_variant_t("T"));
if(pBuf)
...{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("Picture")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
从数据库中读取图片:
HBITMAP hbmp;
int m_Length;
int m_nMaxWidth;
int m_nMaxHeight;
char *m_pBMPBuffer;
HBITMAP CMyScrollView::BufferToHBITMAP()
...{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = m_pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
if (bmfHeader.bfType != (*(WORD*)"BM"))
...{
return NULL;
}
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB;
m_nMaxWidth = bmiHeader.biWidth;
m_nMaxHeight = bmiHeader.biHeight;
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
return hBmp;
}
BOOL CMyScrollView::ShowBitmap()
...{
CString m_sql;
//读取照片二进制表示
m_sql = "select * from TroubleInfo where Status = 'T'";
try
...{
_RecordsetPtr pRst;
pRst = m_ado.GetRecordSet((_bstr_t)m_sql);
long lDataSize = pRst->GetFields()->GetItem("Picture")->ActualSize;
if(lDataSize>0)
...{
_variant_t varPhoto;
varPhoto = pRst->GetFields()->GetItem("Picture")->GetChunk(lDataSize);
if(varPhoto.vt == (VT_ARRAY|VT_UI1))
...{
if(m_pBMPBuffer = new char[lDataSize+1])
...{
char *pBuf = NULL;
SafeArrayAccessData(varPhoto.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize);//图形二进制缓冲区
SafeArrayUnaccessData(varPhoto.parray);
m_Length = lDataSize;//图形二进制长度
hbmp = BufferToHBITMAP();
}
}
}
}
catch (...)
...{
MessageBox("数据库错误,电路图读取失败!","系统提示");
return FALSE;
}
return TRUE;
}
int m_Length;
int m_nMaxWidth;
int m_nMaxHeight;
char *m_pBMPBuffer;
HBITMAP CMyScrollView::BufferToHBITMAP()
...{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = m_pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
if (bmfHeader.bfType != (*(WORD*)"BM"))
...{
return NULL;
}
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB;
m_nMaxWidth = bmiHeader.biWidth;
m_nMaxHeight = bmiHeader.biHeight;
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
return hBmp;
}
BOOL CMyScrollView::ShowBitmap()
...{
CString m_sql;
//读取照片二进制表示
m_sql = "select * from TroubleInfo where Status = 'T'";
try
...{
_RecordsetPtr pRst;
pRst = m_ado.GetRecordSet((_bstr_t)m_sql);
long lDataSize = pRst->GetFields()->GetItem("Picture")->ActualSize;
if(lDataSize>0)
...{
_variant_t varPhoto;
varPhoto = pRst->GetFields()->GetItem("Picture")->GetChunk(lDataSize);
if(varPhoto.vt == (VT_ARRAY|VT_UI1))
...{
if(m_pBMPBuffer = new char[lDataSize+1])
...{
char *pBuf = NULL;
SafeArrayAccessData(varPhoto.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize);//图形二进制缓冲区
SafeArrayUnaccessData(varPhoto.parray);
m_Length = lDataSize;//图形二进制长度
hbmp = BufferToHBITMAP();
}
}
}
}
catch (...)
...{
MessageBox("数据库错误,电路图读取失败!","系统提示");
return FALSE;
}
return TRUE;
}
- 从数据库中读写图片
- delphi 从数据中读写图片数据
- 从数据库中存取图片
- 从数据库中获取图片
- 数据库读写图片
- C# 读写数据库图片
- c#读写数据库图片
- Oracle读写数据库图片
- 如何从数据库中取图片
- 从数据库中读出图片,存入硬盘
- 从数据库中提取图片地址
- 从数据库中取出图片二进制流
- Jfinal 实现从数据库中提取图片
- image从数据库中获取图片方法
- DotImage使用教程:从数据库中读写图像
- 连续不间断滚动图片 图片从数据库中调出
- 读写sql数据库中的图片
- 如何读写数据库二进制图片
- wxWidgets中的事件处理
- 恶搞熊猫烧香 网友爆笑诗词句大集合
- javascript中的对象模型
- EJB3.0依赖注入深入
- Bin Packing pku 2782
- 从数据库中读写图片
- EJB3.0依赖注入深入2
- EJB3.0依赖注入深入3
- 老生长谈之NTLM反向攻击
- asp.net打包过程详解(WEB程序也能打包)
- 面向对象的Javascript开发的一些学习资料
- 关于VC++的几种消息
- javascript - iframe的操作问题
- 在WinSock上使用IOCP