锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 软件开发培训 / 学员作品 / 图片读写显示技术练习
导航
源代码下载
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话: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-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内