锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 软件开发培训 / 学员作品 / 图片读写显示技术练习
导航
源代码下载
服务方向
软件开发
办公财务MIS
股票
设备监控
网页信息采集及控制
多媒体
软件开发培训
Java 安卓移动开发
Java Web开发
HTML5培训
iOS培训
网站前端开发
VC++
C++游戏开发培训
C#软件
C语言(Linux)
ASP.NET网站开发(C#)
C#软件+ASP.NET网站
SOCKET网络通信开发
COMOLE和ActiveX开发
C++(Linux)
汇编和破解
驱动开发
SkinMagicVC++换肤
流媒体开发
MicroStation二次开发
计算机英语翻译
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

图片读写显示技术练习

该练习主要使用ADO技术将大型文本或二进制数据如图片文件存入数据库,从库中读出数据,将图片文件显示出来。
开发平台VC++。代码总数:400行; 开发时间:一天半。
技术难点一:将读取到的数据写入文件Cfile::Write();写完数据后要及时将文件关闭Cfile::Close();这样才能保证将数据完整的写入文件内。
技术难点二:读到数据后将此二进制流数据(即图片文件)显示出来,此处使用开源代码CFreeImage类来实现。

核心源代码

  1. 具体代码如下:

       //打开文件
CFile fileimage;
CFileStatus filestatus;
fileimage.Open("Bluehills.jpg",CFile::modeRead);
fileimage.GetStatus(filestatus);
//分配内存
ULONG nBytes=(ULONG)filestatus.m_size;
HGLOBAL hGlobal=GlobalAlloc(GPTR,nBytes);
LPVOID lpData=GlobalLock(hGlobal);
//将文件写入缓冲区
fileimage.Read(lpData,nBytes);
HRESULT hr;
_variant_t varChunk;
long lngOffset = 0;
UCHAR chData;
SAFEARRAY FAR *psa = NULL;
SAFEARRAYBOUND rgsabound[1];
try
{
m_pRecordset->AddNew();

m_pRecordset->Fields->GetItem("username")->Value=_variant_t("Bluehills.jpg");
m_pRecordset->Fields->GetItem("old")->Value=_variant_t((long)28);
//Create a safe array to store the array of BYTES
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nBytes;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
while(lngOffset < (long)nBytes)
{
chData   = ((UCHAR*)lpData)[lngOffset];
hr = SafeArrayPutElement(psa, &lngOffset, &chData);
if(hr!=S_OK)
return ;
lngOffset++;
}
lngOffset = 0;
//Assign the Safe array  to a variant.
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
hr =m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk);
if(hr!=S_OK)
return ;
m_pRecordset->Update();//Addnew()和编辑后都要进行Update()
}
catch(_com_error &e)
{
CString errormessage;
errormessage.Format("错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}
//Free memory
GlobalUnlock(lpData);

    1. 在向数据库存数据时通过变体变量和安全数组来实现大型二进制文本数据的入库操作。此处有一小细节需引起注意:再向数据库中添加新纪录或编辑修改某记录后一定要Update,这样才会将数据存入库内,知识点虽不难但容易忽视。
  1. 从数据库读取数据并显示
友情链接
版权所有 Copyright(c)2004-2015 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州市文化路47号院1号楼4层(47-1楼位于文化路和红专路十字路口东北角,郑州大学工学院招待所南边,工学院科技报告厅西边。)