您現在的位置是:電腦技術吧?>? 故障問題 ??>??讀取圖像數據,如何快速讀取圖像數據??>??正文詳情

讀取圖像數據,如何快速讀取圖像數據

買友槐2019-11-19 10:11:23 人圍觀
簡介如何讀取圖片數據用VC進行數據庫編程時,經常需要對數據庫中的圖像數據進行處理,從數據庫中讀取和顯示圖像。圖像數據與文本字段不同。它作為OLE字段存儲在數據庫中,通過自動交

在利用VC進行數據庫編程時,經常需要處理數據庫中的圖像數據,將該圖像從數據庫中讀取出來并顯示,圖像數據與文本字段不同,它是作為OLE字段在數據庫中存儲,通過數據集對象的成員變量自動交換得到的圖像數據,得到的數據并不能直接顯示,如何處理圖像數據,一直是數據庫編程中的一個難點,目前關于VC進行數據庫編程的資料不少,但很少涉及圖像數據的操作,筆者針對一現狀,結合自己開發的一個項目,解決了如何顯示數據庫中的圖像這一問題,本文以操作ACESS數據庫為例子,講解一下自己的實現思路,希望對愛好VC編程的朋友們有所幫助,以起到拋磚引玉的作用。

  為了簡化問題,該數據庫的表中只有一個名為Images的OLE字段,我使用DAO連接操作數據庫,讀取的圖像數據顯示在一個對話框上,至于使用ODBC、DAO還是ADO,這要根據具體情況而定,但無論使用哪一種,對圖像的顯示來說,實現的過程是大同小異的。

由于篇幅有限,文章中對如何實現數據庫的連接不再作具體的說明,有興趣的讀者朋友可以參考VC數據庫編程的資料。

實現過程中,首先定義一個CDaoRecordset的子類 CimageData如下:  class CimageData : public CDaoRecordset  {  public:  CimageData (CDaoDatabase* pDatabase = NULL);  DECLARE_DYNAMIC(CimageData)  file://{{AFX_FIELD(CimageData, CDaoRecordset)  CByteArray m_Images;//聲明字節數組用來存放圖像數據  file://}}AFX_FIELD  // Overrides  // ClassWizard generated virtual function overrides  file://{{AFX_VIRTUAL(CimageData)  public:  virtual CString GetDefaultDBName();  virtual CString GetDefaultSQL();  virtual void DoFieldExchange(CDaoFieldExchange* pFX);  file://}}AFX_VIRTUAL  該類的實現為:  CimageData:: CimageData (CDaoDatabase* pdb)  : CDaoRecordset(pdb)  {  file://{{AFX_FIELD_INIT(CimageData)  m_nFields = 1;//數據庫的表中僅有一個字段  file://}}AFX_FIELD_INIT  m_nDefaultType = dbOpenDynaset;//以動態集方式打開數據庫  }  CString CimageData::GetDefaultDBName()  {  return _T(E:IMAGES.mdb);//默認的ACESS數據庫在E盤,名為IMAGES  }  CString CimageData::GetDefaultSQL()  {  return _T([Table]);//默認打開數據庫中名為Table的表  }  void CimageData::DoFieldExchange(CDaoFieldExchange* pFX)  {  file://{{AFX_FIELD_MAP(CimageData)  pFX-SetFieldType(CDaoFieldExchange::outputColumn);  DFX_Binary(pFX, _T([Images]), m_Images);//以二進制方式在Images字段和m_Images變量間交換數據  file://}}AFX_FIELD_MAP  }  有了該類,就可以定義相應的對象來與數據庫中的圖像字段交換數據,下面定義的函數GetImageData()說明了如何根據讀取的OLE字段數據生成待顯示的圖像,需要注意的是該函數中使用的CBitmap類的變量Bitmap是預定義的一個全局變量:  BOOL CImageDlg:: GetImageData(CByteArray DBArray)  {  CByteArray Array;  Array.Copy( DBArray);  int HeaderLen = 78 sizeof(BITMAPFILEHEADER); file://確定圖像頭信息的起始位置  Array.RemoveAt( 0, HeaderLen ); // 移動到圖像頭信息的起始位置  BITMAPINFOHEADER bmiHeader = *(LPBITMAPINFOHEADER)Array.GetData() ;  BITMAPINFO bmInfo = *(LPBITMAPINFO)Array.GetData() ;  file://得到圖像數據的頭信息  int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 bmiHeader.biBitCount;  file://確定圖像的顏色數  LPVOID lpDIBBits;  if( bmInfo.bmiHeader.biBitCount 8 )  lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors bmInfo.bmiHeader.biClrUsed)   ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));  else  lpDIBBits = (LPVOID)(bmInfo.bmiColors nColors);  file://得到圖像各個像素的具體數據  CClientDC dc(NULL);  HBITMAP hBmp = CreateDIBitmap( dc.m_hDC,  bmiHeader,  CBM_INIT,  lpDIBBits,  bmInfo,  DIB_RGB_COLORS);  file://生成位圖句柄  Bitmap.Attach( hBmp );//將該句柄與定義的Bitmap對象聯系在一起  Array.RemoveAll(); file://釋放內存  return TRUE;  }  有了上面的準備工作,現在可以實現圖像的顯示函數了,其實現如下:  void CImageDlg::OnShowImage()  {  CimageData db;//定義記錄集對象  db.Open();打開數據庫  GetImageData(db.m_Images);//根據記錄集對象的成員變量生成圖像對象  file://以下是在對話框的固定區域顯示圖像  CPaintDC dc(this);  if (!(Bitmap.m_hObject == NULL))  { CDC dcMem;  dcMem.CreateCompatibleDC( dc ); file://create a Memory Image  CBitmap* pbmpOld ;  BITMAP BmpSize ;  Bitmap.GetBitmap(BmpSize); file://get Image Size  pbmpOld = dcMem.SelectObject(Bitmap);  dc.StretchBlt( 20, 20, 200, 200, dcMem, 0, 0, BmpSize.bmWidth, BmpSize.bmHeight, SRCCOPY);  dcMem.SelectObject( pbmpOld );  }  以上代碼中使用的數據庫為ACESS97,程序在windows98、Visual C 6.0環境下編譯通過,運行正常。

版權聲明:本文由 買友槐 整理編輯。

原標題:matlab讀取圖像數據,matlab讀取raw圖像數據

轉載注明出處:http://www.dn9ww09s.icu/fault/13594.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • steam創意工坊錯誤代碼103,steam加好友錯誤代碼103

    steam創意工坊錯誤代碼103,steam加好友錯誤代碼103 相關圖片steam市場顯示錯誤代碼Steam是一個非常受歡迎的游戲平臺。最近,很多玩家和朋友反映,他們遇到的最常見的問題是101和103代碼錯誤。如何解決蒸汽錯誤代碼103的問題?如何解決ste絕地求...

  • 什么是網站風格,網站的設計風格

    什么是網站風格,網站的設計風格 相關圖片有哪些網站在網頁設計或應用程序界面設計中,為了更好地規范設計文檔,設計人員通常會花時間組織各種界面元素,如字體大小、段落間距、按鈕顏色、大小等,而制作風格向導則會...

  • 高德車機離線地圖怎樣刪除,怎樣卸載高德地圖數據

    高德車機離線地圖怎樣刪除,怎樣卸載高德地圖數據 相關圖片新版高德地圖離線地圖高德地圖之所以成為流行的地圖導航軟件,是因為它的離線地圖功能可以幫助用戶在沒有任何信號的情況下順利使用。如何刪除離線地圖?如何使用離線地圖?下...

  • html img src,html5中的imgsrc

    html img src,html5中的imgsrc 相關圖片html src路徑已發現許多網絡資源存在此問題。這里有幾種方法。在實驗中,代碼如下:IMG id=imginit ALT=seaside style SRC=javascriptcss3取imgsrc...

  • 網易云音樂取消黑膠自動續費,網易云音樂如何開通自動續費

    網易云音樂取消黑膠自動續費,網易云音樂如何開通自動續費 相關圖片網易云音樂人工客服電話網易云音樂以其符合用戶喜好的超級音樂推薦服務深受很多人的喜愛。相信有很多人想知道如何取消網易云音樂的自動續費?如何注銷網易云音樂賬號?現在,...

  • 和彩云擴容,和彩云怎么擴容

    和彩云擴容,和彩云怎么擴容 相關圖片的彩云隨著免費網絡硬盤的不斷消亡,除了百度云硬盤,我們還有其他選擇嗎?于是在眾多網友的集體努力下,又挖出了彩云。小編以前從來沒聽說過這個網盤,其實也不小。它是一個...

  • 如何能過目不忘,過目不忘

    如何能過目不忘,過目不忘 相關圖片有沒有人可以過目不忘從點燃朋友圈的H5游戲《圍著緊張的貓》到公眾對H5專頁“我們之間只有一個字”的評論,顛覆了傳統廣告,從2014年下半年開始,各種H5游戲和專頁層出不窮,這是...

  • 創建貼吧的條件,貼吧創建需要什么條件

    創建貼吧的條件,貼吧創建需要什么條件 相關圖片自己創建貼吧有什么用百度貼吧發展如火如荼,取代了眾多論壇,成為最大的志同道合者聚集地之一。很多人還想創建一個貼吧,與志同道合的朋友分享和交流。如何創建帖子?創建帖...

  • html中,html中p

    html中,html中p 相關圖片html模板下載在HTML中,有兩個文件a.htm和b.htm。在同一目錄下,a.htm的內容如下:!--include file=b.htm--b.htm今天的內容如下:雨3html中居中...

  • 網絡打不開網頁是怎么回事,有網絡打不開網頁咋回事啊

    網絡打不開網頁是怎么回事,有網絡打不開網頁咋回事啊 相關圖片網絡打不開怎么回事經常訪問貼吧的用戶有時會遇到百度貼吧無法打開的情況,但在打開其他網頁進行測試時,網絡是正常的。這是什么原因?怎么解決?一。DNS錯誤,修改或修復DNS,...

熱評文章

  • 錘子pro2什么時候出的,堅果pro發售價

    錘子pro2什么時候出的,堅果pro發售價 相關圖片堅果pro2內存不夠用怎么辦Nut pro2是hammer technology推出的最新智能手機。對于許多錘子粉,堅果pro2什么時候上市?什么是nut pro2的無障礙模式?現在,超人堅果pro什么時候上市...

  • 微信為什么沒有搖一搖功能,微信搖一搖功能

    微信為什么沒有搖一搖功能,微信搖一搖功能 相關圖片怎么關閉微信搖一搖功能HTML5的一個重要特性是設備定向,它將方向傳感器和運動傳感器封裝在底層,并提供DOM事件支持。此功能包括兩種類型的事件:1。設備定向:封裝有沒有搖一搖...

  • 貼吧小尾巴怎么設置不了,貼吧小尾巴怎么添加

    貼吧小尾巴怎么設置不了,貼吧小尾巴怎么添加 相關圖片貼吧會員的小尾巴怎么設置經常逛棒棒的小伙伴,發現一些用戶跟帖中的棒棒小尾巴,干脆從人群中脫穎而出,有木有。那么你知道怎么設置小尾桿嗎?很多人不知道如何設置小尾巴的...

  • 堅果Pro2,堅果Pro

    堅果Pro2,堅果Pro 相關圖片堅果pro2參數Nut Pro 2是hammer technology推出的最新智能手機。我相信許多孩子剛得到的第一件事就是插上SIM卡。如何安裝nut pro2的SIM卡?請堅果手機pro2...

  • audio 標簽,audio標簽的autoplay

    audio 標簽,audio標簽的autoplay 相關圖片audio最新HTML5音頻標簽使用JS進行回放控制實例音頻標簽可以在HTML5瀏覽器中播放音頻文件。默認情況下,音頻提供一個控制面板,但有時我們只需要播放聲音。控制面板由我audio標簽自動...

  • 如何設置簽名,設置簽名

    如何設置簽名,設置簽名 相關圖片qq個性簽名設置權限如今,百度貼吧越來越注重個性化,所以在普通的回復樓里,有一個貼吧的小尾巴,還有一個個人簽名文件。今天,我們來談談如何設置簽名文件進入百度貼吧,登陸...

  • 吻合,吻合手術

    吻合,吻合手術 相關圖片神經吻合術口型匹配(交換方式)進入論壇參與討論:http://www.missyuan.com/viewthread.php?TID=417579正確的嘴型匹配是一門藝術吻合的近義詞...

  • 王者助手對局先知,王者助手怎么打開對局先知

    王者助手對局先知,王者助手怎么打開對局先知 相關圖片王者對局先知怎么設置王者榮耀作為一場競技游戲,知道你是誰,你是誰。國王榮耀助手中的火柴先知功能可以讓你知道誰在對手陣營中更強大,有利于在游戲初期鎖定目標,在搖籃中...

  • 我的激萌怎么不能拼圖,怎樣用faceu激萌拼圖

    我的激萌怎么不能拼圖,怎樣用faceu激萌拼圖 相關圖片b612可以拼圖嗎作為一款功能強大的美容相機,用戶最關心的問題是如何制作拼圖和視頻。現在,超人軟件編輯將向您介紹關于薊門的相關內容,希望您喜歡它是怎么發生的?faceu激萌相...

  • fireworks怎么用,fireworks用的多嗎

    fireworks怎么用,fireworks用的多嗎 相關圖片the fireworks對于焰火中圖標的詳細描述,在使用焰火(以下簡稱FW)進行圖標設計時要注意兩點:一是FW注重網頁設計,不適合產生一些過于復雜的PS效果,請期待FW CS5的PS過fireworks的中文...

關注微信

变脸官网查询