Visual C中實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的讀取顯示_第1頁
Visual C中實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的讀取顯示_第2頁
Visual C中實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的讀取顯示_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Visual C+中實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的讀取顯示在利用VC進(jìn)行數(shù)據(jù)庫編程時(shí),經(jīng)常需要處理數(shù)據(jù)庫中的圖像數(shù)據(jù),將該圖像從數(shù)據(jù)庫中讀取出來并顯示,圖像數(shù)據(jù)與文本字段不同,它是作為OLE字段在數(shù)據(jù)庫中存儲(chǔ),通過數(shù)據(jù)集對(duì)象的成員變量自動(dòng)交換得到的圖像數(shù)據(jù),得到的數(shù)據(jù)并不能直接顯示,如何處理圖像數(shù)據(jù),一直是數(shù)據(jù)庫編程中的一個(gè)難點(diǎn),目前關(guān)于VC進(jìn)行數(shù)據(jù)庫編程的資料不少,但很少涉及圖像數(shù)據(jù)的操作,筆者針對(duì)一現(xiàn)狀,結(jié)合自己開發(fā)的一個(gè)項(xiàng)目,解決了如何顯示數(shù)據(jù)庫中的圖像這一問題,本文以操作ACESS數(shù)據(jù)庫為例子,講解一下自己的實(shí)現(xiàn)思路,希望對(duì)愛好VC編程的朋友們有所幫助,以起到拋磚引玉的作用。 為了簡化問題

2、,該數(shù)據(jù)庫的表中只有一個(gè)名為Images的OLE字段,我使用DAO連接操作數(shù)據(jù)庫,讀取的圖像數(shù)據(jù)顯示在一個(gè)對(duì)話框上,至于使用ODBC、DAO還是ADO,這要根據(jù)具體情況而定,但無論使用哪一種,對(duì)圖像的顯示來說,實(shí)現(xiàn)的過程是大同小異的。由于篇幅有限,文章中對(duì)如何實(shí)現(xiàn)數(shù)據(jù)庫的連接不再作具體的說明,有興趣的讀者朋友可以參考VC數(shù)據(jù)庫編程的資料。實(shí)現(xiàn)過程中,首先定義一個(gè)CDaoRecordset的子類 CimageData如下: class CimageData : public CDaoRecordset public: CimageData (CDaoDatabase* pDatabase = N

3、ULL); DECLARE_DYNAMIC(CimageData) file:/AFX_FIELD(CimageData, CDaoRecordset) CByteArray m_Images;/聲明字節(jié)數(shù)組用來存放圖像數(shù)據(jù) file:/AFX_FIELD / Overrides / ClassWizard generated virtual function overrides file:/AFX_VIRTUAL(CimageData) public: virtual CString GetDefaultDBName(); virtual CString GetDefaultSQL(); v

4、irtual void DoFieldExchange(CDaoFieldExchange* pFX); file:/AFX_VIRTUAL 該類的實(shí)現(xiàn)為: CimageData: CimageData (CDaoDatabase* pdb) : CDaoRecordset(pdb) file:/AFX_FIELD_INIT(CimageData) m_nFields = 1;/數(shù)據(jù)庫的表中僅有一個(gè)字段 file:/AFX_FIELD_INIT m_nDefaultType = dbOpenDynaset;/以動(dòng)態(tài)集方式打開數(shù)據(jù)庫 CString CimageData:GetDefaultDB

5、Name() return _T("E:IMAGES.mdb");/默認(rèn)的ACESS數(shù)據(jù)庫在E盤,名為IMAGES CString CimageData:GetDefaultSQL() return _T("Table");/默認(rèn)打開數(shù)據(jù)庫中名為"Table"的表 void CimageData:DoFieldExchange(CDaoFieldExchange* pFX) file:/AFX_FIELD_MAP(CimageData) pFX->SetFieldType(CDaoFieldExchange:outputColu

6、mn); DFX_Binary(pFX, _T("Images"), m_Images);/以二進(jìn)制方式在Images字段和m_Images變量間交換數(shù)據(jù) file:/AFX_FIELD_MAP 有了該類,就可以定義相應(yīng)的對(duì)象來與數(shù)據(jù)庫中的圖像字段交換數(shù)據(jù),下面定義的函數(shù)GetImageData()說明了如何根據(jù)讀取的OLE字段數(shù)據(jù)數(shù)據(jù)數(shù)據(jù) CClientDC dc(NULL); HBITMAP hBmp = CreateDIBitmap( dc.m_hDC, &bmiHeader, CBM_INIT, lpDIBBits, &bmInfo, DIB_RGB

7、_COLORS); file:/生成位圖句柄 Bitmap.Attach( hBmp );/將該句柄與定義的Bitmap對(duì)象聯(lián)系在一起 Array.RemoveAll(); file:/釋放內(nèi)存 return TRUE; 有了上面的準(zhǔn)備工作,現(xiàn)在可以實(shí)現(xiàn)圖像的顯示函數(shù)了,其實(shí)現(xiàn)如下: void CImageDlg:OnShowImage() CimageData db;/定義記錄集對(duì)象 db.Open();打開數(shù)據(jù)庫 GetImageData(db.m_Images);/根據(jù)記錄集對(duì)象的成員變量生成圖像對(duì)象 file:/以下是在對(duì)話框的固定區(qū)域顯示圖像 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.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論