网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
向数据库中存取图片(BITMAP)
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
unk(SavePic(FileBuff,FileLen));
 }
 catch(_com_error e)
 {
  MessageBox("Add picture to sqlserver2000 is failed!");
 }
 pRecordsetSql->Update();
在数据库中读取位图信息并显示出来:
其实读取并且显示过程的过程也非常的简单,主要是把它们在数据库中读取出来,放到一个内存空间中,然后把这此些读取出来的信息再转换成一个BITMAP就可以显示了,(如果不明白怎么转换的话,可以看一下关于位图的文件格式,我关于它的一些信息,也可以参与一下本人的《VC下显示位图的几种方法》里面有详细的解释)
进入正题:
 _variant_t TheValue;//存储读出来的数据
 DWORD DataSize;//在数据库中读取出来的位图的大小

 char *pBuff;//用于存放位图的内存空间
 CString str="select * from Picture";//SQL语句^_^
 BSTR bstrRecordset=str.AllocSysString();//这句也不用解释了吧
 HBITMAP hBitmap;//定义一个HBITMAP对象,用于显示位图用
 try
 {
  pRecordset->Open(bstrRecordset,pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  pRecordset->MoveLast();
  TheValue=pRecordset->GetCollect("Picture");//读取字段一
 DataSize=pRecordset->GetFields()->GetItem("Picture")->ActualSize;//得到位图字段的大小
  if(DataSize>0)//判断那个位图字段是否为空
  {
   if(TheValue.vt==(VT_ARRAY|VT_UI1))
   {
    if(pBuff=new char[DataSize+1])
    {
     char *buff;
/***********************主要也就下面这几句画,其它的和显示位图相似**************************/
     SafeArrayAccessData(TheValue.parray,(void**)&buff);//把位图数据放到buff中去
     memcpy(pBuff,buff,DataSize);//把位图数据放到pBuff中
     SafeArrayUnaccessData(TheValue.parray);//释放
     hBitmap=MemTOPic(pBuff);//这是一个自字义
    }
   }
  }
 }
 catch(_com_error e)
 {
  MessageBox("打开数据表失败!");
  return ;
 }
/******************根据HBITMAP把位图显示出来************************/
 CBitmap cBitmap;
 CClientDC *pDC=new CClientDC(this);
 BITMAP bitmap;
 CDC MemDC;
cBitmap.Attach(hBitmap);
 MemDC.CreateCompatibleDC(pDC);
 MemDC.SelectObject(&cBitmap);
 cBitmap.GetBitmap(&bitmap);
 pDC->StretchBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&MemDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
 MemDC.DeleteDC();
 ::DeleteObject(&bitmap);
/*************自定义函数************把内存数据转为HBITMAP***************************/
HBITMAP CDBPicDllDlg::MemTOPic(char *buff)
{

 HBITMAP hBitmap=NULL;
 LPSTR hDib=NULL;
 LPSTR PicBuff=NULL;
 PicBuff=buff;
 LPVOID pDibBit=NULL;
 BITMAPFILEHEADER bmpHead;//位图头结构
 DWORD LenBmpHead;
 LenBmpHead=sizeof(BITMA

  • 上一篇资讯: 2000/XP 下实现内存映射
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号