




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 VC圖像編程基礎(chǔ) 第三章 VC圖像編程基礎(chǔ) 3.1 VC+可視化編程可視化編程3.2 ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù) 3.3 設(shè)計(jì)設(shè)計(jì)CDibObject類類 3.4 使用使用CDibObject類類 3.5 CDibObject類應(yīng)用實(shí)例類應(yīng)用實(shí)例 第三章 VC圖像編程基礎(chǔ) 3.1 VC+可視化編程可視化編程 3.1.1 概述概述 VC+是Microsoft公司推出的開發(fā)Win 32應(yīng)用程序(Windows 95/98/2000/XP/NT)的面向?qū)ο蟮目梢暬晒ぞ摺kS著VC+所提供的Microsoft基礎(chǔ)類庫(kù)(Microsoft Foundation Class
2、Library, 簡(jiǎn)寫為MFC), 對(duì)Windows 95/NT所用的Win 32應(yīng)用程序接口(Win 32 Application Programming InterfaceAPI)進(jìn)行了徹底的封裝,從而可以使用完全的面向?qū)ο蟮姆椒▉磉M(jìn)行Win 32應(yīng)用程序的開發(fā),這樣大大縮短了應(yīng)用程序開發(fā)周期, 降低了開發(fā)成本,也將程序員從大量的復(fù)雜勞動(dòng)中解放出來。 第三章 VC圖像編程基礎(chǔ) VC+ Developer Studio包含有編寫程序源代碼的文本編輯器、設(shè)計(jì)用戶界面(菜單、對(duì)話框、 圖標(biāo)等)的資源編輯器、 建立項(xiàng)目配置的項(xiàng)目管理器、 檢查程序錯(cuò)誤的集成調(diào)試器等工具, 同時(shí)它還提供了功能強(qiáng)大的應(yīng)
3、用程序向?qū)Чぞ逜ppWizard和類向?qū)Чぞ逤lassWizard。AppWizard用于生成各種不同類型的具有Windows界面風(fēng)格的應(yīng)用程序的基本框架,在生成應(yīng)用程序框架后,使用ClassWizard便可輕松完成創(chuàng)建新類、定義消息處理函數(shù)、重載虛擬函數(shù)等操作。 第三章 VC圖像編程基礎(chǔ) 3.1.2 用戶界面用戶界面 圖3-1 VC+ 6.0用戶界面 工作區(qū)窗口輸出窗口編輯區(qū)窗口第三章 VC圖像編程基礎(chǔ) VC+ 6.0提供有多種不同用途的菜單命令和工具按鈕,多數(shù)菜單和工具按鈕是人們熟悉的標(biāo)準(zhǔn)Windows菜單和工具銨鈕。用VC+ 6.0開發(fā)應(yīng)用程序主要涉及三大類型的文件: 文件(Files)
4、、 項(xiàng)目(Projects)和工作區(qū)(Workspaces)。在VC+ 6.0中, 通常意義下開發(fā)一個(gè)Windows應(yīng)用程序是指生成一個(gè)項(xiàng)目,該項(xiàng)目包含著一組相關(guān)的文件, 如各種頭文件(.h)、 實(shí)現(xiàn)文件(.cpp)、 資源文件(.rc)、 圖標(biāo)文件(.ico)、 位圖文件(.bmp)等, 而該項(xiàng)目必須在一個(gè)工作區(qū)打開。所以,當(dāng)?shù)谝淮谓⒁粋€(gè)應(yīng)用程序時(shí),應(yīng)選擇新建一個(gè)項(xiàng)目,此時(shí)VC+6.0自動(dòng)建立一個(gè)工作區(qū),并把新建的項(xiàng)目在該工作區(qū)中打開, 以后要對(duì)該項(xiàng)目進(jìn)行修改、補(bǔ)充、 增加等工作,只要打開對(duì)應(yīng)的工作區(qū)即可。 第三章 VC圖像編程基礎(chǔ) VC+ 6.0以項(xiàng)目工作區(qū)(Project Worksp
5、ace)的方式來組織文件、項(xiàng)目和項(xiàng)目配置,通過項(xiàng)目工作區(qū)窗口可以查看和訪問項(xiàng)目中的所有元素。首次創(chuàng)建項(xiàng)目工作區(qū)時(shí), 要?jiǎng)?chuàng)建一個(gè)項(xiàng)目工作區(qū)目錄、一個(gè)項(xiàng)目工作區(qū)文件、 一個(gè)項(xiàng)目文件和一個(gè)工作區(qū)選項(xiàng)文件。項(xiàng)目工作區(qū)文件用于描述工作區(qū)及其內(nèi)容,擴(kuò)展名為.dsw。項(xiàng)目文件用于記錄項(xiàng)目中各種文件的名字和位置, 擴(kuò)展名為.dsp。工作區(qū)選項(xiàng)文件用于存儲(chǔ)項(xiàng)目工作區(qū)設(shè)置, 擴(kuò)展名為.opt。 第三章 VC圖像編程基礎(chǔ) 創(chuàng)建或者打開項(xiàng)目工作區(qū)時(shí), VC+ 6.0將在項(xiàng)目工作區(qū)窗口中顯示與項(xiàng)目有關(guān)的信息。項(xiàng)目工作區(qū)窗口主要由三個(gè)面板構(gòu)成, 即FileView、 ResouceView和ClassView,分別用于顯
6、示項(xiàng)目中定義的C+類、資源文件和包含在項(xiàng)目工作區(qū)中的文件。每個(gè)面板用于指定項(xiàng)目工作區(qū)中所有項(xiàng)目的不同視圖, 視圖中每個(gè)文件夾可以包含其他文件夾或各種元素(如,子項(xiàng)目、文件、 資源、類和標(biāo)題等)。通過項(xiàng)目工作區(qū)窗口可以定位到項(xiàng)目中的任一位置,以對(duì)其進(jìn)行相應(yīng)的編輯(源程序、資源等)第三章 VC圖像編程基礎(chǔ) 編輯區(qū)窗口打開文本編輯器和資源編輯器。文本編輯器的使用與Word非常類似,通過它可方便的進(jìn)行程序源代碼的輸入、 編輯和修改工作。在資源編輯器中可進(jìn)行各種資源的編輯工作, 如對(duì)話框、圖標(biāo)、菜單、位圖等,從而直觀地設(shè)計(jì)程序的用戶界面。輸出窗口用于顯示項(xiàng)目建立過程中所產(chǎn)生的錯(cuò)誤信息、 調(diào)試過程中的輸出
7、信息等,用它可以方便地定位到工程中的錯(cuò)誤位置, 觀察到程序調(diào)試過程中的輸出結(jié)果。 第三章 VC圖像編程基礎(chǔ) 3.1.3 框架和文檔框架和文檔視結(jié)構(gòu)視結(jié)構(gòu) 基于MFC的應(yīng)用程序框架(Application Framework)是定義了程序結(jié)構(gòu)的MFC類庫(kù)中類的集合,它是VC+編程的骨架。運(yùn)用MFC應(yīng)用程序框架具有如下優(yōu)點(diǎn): (1)標(biāo)準(zhǔn)化的程序結(jié)構(gòu)和用戶接口:這對(duì)具有標(biāo)準(zhǔn)用戶界面的Win 32程序來說,可以極大地減輕程序員的負(fù)擔(dān),使程序員不必過多地考慮界面,而把主要精力放在程序設(shè)計(jì)上,以提高程序設(shè)計(jì)的效率。 (2) 框架產(chǎn)生的程序代碼短,運(yùn)行速度快,具有很大的靈活性。 (3) MFC封裝了Win
8、32 SDK中的幾乎所有的函數(shù), 能夠?qū)崿F(xiàn)Win 32系統(tǒng)的任何功能。 第三章 VC圖像編程基礎(chǔ) MFC框架的核心是文檔視結(jié)構(gòu)(Document-View Architecture)。簡(jiǎn)單地說,文檔視結(jié)構(gòu)就是將數(shù)據(jù)和對(duì)數(shù)據(jù)的觀察相分離, 文檔僅處理數(shù)據(jù)的讀、寫等操作,視則是顯示和處理數(shù)據(jù)的窗口,視可以操作文檔中的數(shù)據(jù)。 MFC框架的基本結(jié)構(gòu)包括應(yīng)用程序?qū)ο蟆⒅骺蚣艽翱凇⑽臋n、視等,框架通過命令和消息將它們結(jié)合在一起,共同對(duì)用戶的操作做出響應(yīng)。 應(yīng)用程序的對(duì)象類由CWinApp派生,一個(gè)應(yīng)用程序有且僅有一個(gè)應(yīng)用程序?qū)ο螅?fù)責(zé)應(yīng)用程序?qū)嵗某跏蓟瓦M(jìn)程結(jié)束時(shí)的資源清除,以及創(chuàng)建和管理應(yīng)用程序所支
9、持的所有文檔模板的工作。第三章 VC圖像編程基礎(chǔ) 主框架窗口是應(yīng)用程序的主窗口。MFC框架定義了兩種基本的主框架窗口類,即單文檔接口SDI(Single Document Interface)主框架窗口類和多文檔接口MDI(Multiple DocumentInterface)主框架窗口類。對(duì)于SDI,視是主框架窗口的子窗口;對(duì)于MDI,必須從CMDIChildWnd派生出主框架窗口的子窗口,視是該子窗口的子窗口。 第三章 VC圖像編程基礎(chǔ) 文檔類由CDocument類派生,文檔是一個(gè)應(yīng)用程序數(shù)據(jù)元素的集合,它構(gòu)成應(yīng)用程序所使用的數(shù)據(jù)單元,另外,它還提供了管理和維護(hù)數(shù)據(jù)的手段。文檔是一種數(shù)據(jù)源
10、,數(shù)據(jù)源有很多種, 最常見的是磁盤文件,但它不一定是一個(gè)磁盤文件,文檔的數(shù)據(jù)源也可以來自串行口、網(wǎng)絡(luò)或攝像機(jī)輸入信號(hào)等。視類從CView或其子類(CEditView、CFormView、CRecordView、CScrollView等)派生,是數(shù)據(jù)的用戶窗口,為用戶提供了文檔可視的數(shù)據(jù)顯示,它將文檔的部分或全部?jī)?nèi)容顯示在窗口中。視還給用戶提供了一個(gè)與文檔中的數(shù)據(jù)進(jìn)行交互的界面,它把用戶的輸入轉(zhuǎn)化為對(duì)文檔中數(shù)據(jù)的操作。每個(gè)文檔都會(huì)有一個(gè)或多個(gè)視顯示,一個(gè)視既可以輸出到屏幕窗口中,也可以輸出到打印機(jī)上。第三章 VC圖像編程基礎(chǔ) 圖3-2 MFC應(yīng)用程序框架結(jié)構(gòu)(a) SDI框架結(jié)構(gòu); (b) MD
11、I框架結(jié)構(gòu) 子框架窗口1子框架窗口3視3子框架窗口2視2主框架窗口菜單欄主框架窗口視1狀態(tài)欄文檔1文檔2文檔模板1文檔模板2應(yīng)用程序?qū)ο蟛藛螜谝暊顟B(tài)欄應(yīng)用程序?qū)ο笪臋n文檔模板(a)(b)第三章 VC圖像編程基礎(chǔ) 文檔視結(jié)構(gòu)大大簡(jiǎn)化了多數(shù)應(yīng)用程序的設(shè)計(jì)開發(fā)過程。它帶來的好處主要有: (1) 將數(shù)據(jù)操作和數(shù)據(jù)顯示、 用戶界面分離。這是一種“分而治之”的思想, 這種思想使得模塊劃分更加合理、 模塊獨(dú)立性更強(qiáng),同時(shí)也簡(jiǎn)化了數(shù)據(jù)操作和數(shù)據(jù)顯示、用戶界面設(shè)計(jì)工作。文檔只負(fù)責(zé)數(shù)據(jù)管理,不涉及用戶界面;視只負(fù)責(zé)數(shù)據(jù)輸出與用戶界面的交互,可以不考慮應(yīng)用程序的數(shù)據(jù)是如何組織的,甚至當(dāng)文檔中的數(shù)據(jù)結(jié)構(gòu)發(fā)生變化時(shí)也不
12、必改動(dòng)視的代碼。 第三章 VC圖像編程基礎(chǔ) (2) MFC在文檔視結(jié)構(gòu)中提供了許多標(biāo)準(zhǔn)操作界面,包括新建文件、 打開文件、 保存文件、打印等,減輕了用戶的工作量。用戶不必再編寫這些重復(fù)的代碼,從而可以把更多的精力放到編寫應(yīng)用程序特定功能的代碼上(主要是從數(shù)據(jù)源中讀取數(shù)據(jù)和顯示)。第三章 VC圖像編程基礎(chǔ) (3)支持打印和打印預(yù)覽,用戶無需編寫代碼或只需要編寫很少的代碼,就可以為應(yīng)用程序提供打印和打印預(yù)覽功能。同樣的功能如果自己寫的話, 需要數(shù)千行代碼。 由于文檔視結(jié)構(gòu)功能強(qiáng)大,因此一般用VC+進(jìn)行程序設(shè)計(jì)時(shí)都首先使用AppWizard生成基于文檔視結(jié)構(gòu)的單文檔或多文檔應(yīng)用程序框架,然后在其中添
13、加自己需要的代碼,完成應(yīng)用程序的特定功能。 第三章 VC圖像編程基礎(chǔ) 3.1.4 編程基本流程編程基本流程 VC+的資源編輯器能以所見即所得(What you see is what you get)的形式直接編輯應(yīng)用程序用戶界面,為所有資源分配ID標(biāo)識(shí)號(hào)。ClassWizard能把對(duì)話框模板與自動(dòng)生成的類定義或與已有的類代碼連接起來, 為菜單項(xiàng)、 控件等資源生成空的處理函數(shù)模板,創(chuàng)建消息映射函數(shù)模板,并將資源ID與處理函數(shù)聯(lián)接起來。通過使用AppWizard,程序員的編程工作便簡(jiǎn)化為用資源編輯器直觀地設(shè)計(jì)界面,完善對(duì)話框類代碼。在空的處理函數(shù)模板處填寫響應(yīng)用戶操作的代碼,是一種完善的可視化編
14、程方法。 第三章 VC圖像編程基礎(chǔ) 用VC+進(jìn)行Win 32可視化編程的基本流程如下: (l) 生成框架: 運(yùn)行AppWizard, 并按需要指定生成應(yīng)用程序的選項(xiàng),指定框架中視類的基類(CView、 CEditView、 CFormView、 CScrollView、 CTreeView等)。AppWizard將按指定的選項(xiàng)生成應(yīng)用程序框架和相關(guān)的文件,包括項(xiàng)目(project)的工作空間(workspace)文件和源文件,主要是應(yīng)用程序(application)、 文檔(document)、 視(view)和主框窗口(main frame)的C+代碼文件(*.cpp, *.h文件),以及缺
15、省包含標(biāo)準(zhǔn)界面接口的資源文件(*.rc)。 第三章 VC圖像編程基礎(chǔ) (2) 設(shè)計(jì)用戶界面: 利用VC+資源編輯器編輯資源文件, 設(shè)計(jì)菜單、對(duì)話框、工具條、字符串、加速鍵、位圖、圖標(biāo)、 光標(biāo)等項(xiàng)目資源。 (3) 聯(lián)接界面和代碼:利用ClassWizard把資源文件中定義的界面資源標(biāo)識(shí)ID(如菜單項(xiàng)、工具條和對(duì)話框中的控件等)在指定的源文件中映射成相應(yīng)的函數(shù)模板。 (4)編寫、修改函數(shù)代碼:利用ClassWizard可以方便地在源代碼編輯器(source code editor)中跳轉(zhuǎn)到指定的函數(shù)代碼處。 第三章 VC圖像編程基礎(chǔ) (5) 根據(jù)需要?jiǎng)?chuàng)建新類和編寫代碼: 用ClassWizard創(chuàng)
16、建新類, 并生成相應(yīng)的源文件。 如新類是對(duì)話框類, 可先用資源編輯器生成對(duì)話框模板, 然后用ClassWizard創(chuàng)建對(duì)話框類代碼,并與模板聯(lián)接,編寫新類相關(guān)的源代碼。 (6)實(shí)現(xiàn)文檔類:在AppWizard生成的框架基礎(chǔ)上設(shè)計(jì)文檔數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),在文檔類中增加相應(yīng)的成員變量和成員函數(shù), 實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作和文檔與數(shù)據(jù)的接口。 第三章 VC圖像編程基礎(chǔ) (7) 實(shí)現(xiàn)框架中標(biāo)準(zhǔn)的文件操作命令,即Open、Save和Save As命令:框架已完成標(biāo)準(zhǔn)的文件操作命令的所有接口,程序員要做的僅僅是編寫文檔類的串行化(Serialize())成員函數(shù)。 (8) 實(shí)現(xiàn)視類: 框架已構(gòu)造好了文檔與視的關(guān)系,
17、視能方便地訪問文檔中的public數(shù)據(jù)成員,可根據(jù)文檔的需要構(gòu)造一個(gè)或多個(gè)視類。通過ClassWizard把視的用戶接口資源映射成函數(shù)模板,并編寫函數(shù)代碼。 第三章 VC圖像編程基礎(chǔ) (9) 如需要,增加分割窗口(splitter window): 在SDI的主框窗口類或MDI的子窗口類中添加一個(gè)CSplitterWnd對(duì)象, 并在窗口類的OnCreateClient成員函數(shù)中對(duì)CSplitterWnd對(duì)象進(jìn)行創(chuàng)建和初始化。如果用戶分割了一個(gè)窗口,框架將給文檔創(chuàng)建并增加附加的視對(duì)象。 (10)建立、調(diào)試、修改應(yīng)用程序。如有問題, 可根據(jù)需要重復(fù)步驟(2)(10)。 (11) 測(cè)試應(yīng)用程序。如有
18、問題,可根據(jù)需要重復(fù)步驟(2)(11)。 (12) 結(jié)束。 第三章 VC圖像編程基礎(chǔ) 3.2 ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)3.2.1 ImageLoad.dll庫(kù)簡(jiǎn)介庫(kù)簡(jiǎn)介 使用VC+6.0提供的Dependency Walker工具,可以查看ImageLoad.dll的導(dǎo)出函數(shù)列表,如圖3-3所示。可見, 該動(dòng)態(tài)鏈接庫(kù)共有22個(gè)函數(shù), 其中18個(gè)函數(shù)與圖像文件的讀寫操作有關(guān), 這些函數(shù)分為三類:Load函數(shù)用于讀入圖像文件; Save函數(shù)用于保存圖像文件;Get函數(shù)用于獲取圖像文件的相關(guān)信息。對(duì)于ImageLoad.dll動(dòng)態(tài)鏈接庫(kù),查看其定義頭文件ImageLoad.h便
19、可對(duì)其屬性(成員變量)和方法(成員函數(shù))有一全面的了解。 第三章 VC圖像編程基礎(chǔ) 3-3第三章 VC圖像編程基礎(chǔ) /ImageLoad.h/ Generic /Image Type#define IMAGETYPE_NONE 0#define IMAGETYPE_BMP1#define IMAGETYPE_GIF2#define IMAGETYPE_PCX3#define IMAGETYPE_TGA4#define IMAGETYPE_JPG5#define IMAGETYPE_TIF6 第三章 VC圖像編程基礎(chǔ) #ifdef - -cplusplusextern C #endif/ Err
20、orint - -declspec (dllexport) GetLastPicLibError( void );/ Type filenameint- -declspec (dllexport) FileType( const char * );第三章 VC圖像編程基礎(chǔ) / BMP / / hDib filenameHGLOBAL- -declspec (dllexport) LoadBMP( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dllexport) GetBMPInfo(const
21、 char *, int *, int *, int *, int *, int * ); / Success filename hDibBOOL- -declspec (dllexport) SaveBMP( const char *, HGLOBAL ); 第三章 VC圖像編程基礎(chǔ) / GIF / hDib filenameHGLOBAL- -declspec (dllexport) LoadGIF( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dllexport) GetGIFInfo(
22、const char *, int *, int *, int *, int *, int * );/ Success filename hDibBOOL- -declspec (dllexport) SaveGIF( const char *, HGLOBAL ); 第三章 VC圖像編程基礎(chǔ) / PCX / hDib filenameHGLOBAL- -declspec (dllexport) LoadPCX( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dllexport) GetPCXI
23、nfo(const char *, int *, int *, int *, int *, int * ); / Success filename hDibBOOL- -declspec (dllexport) SavePCX( const char *, HGLOBAL ); 第三章 VC圖像編程基礎(chǔ) / TGA / hDib filenameHGLOBAL- -declspec (dllexport) LoadTGA( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dllexport) Ge
24、tTGAInfo(const char *, int *, int *, int *, int *, int * ); / Success filename hDibBOOL- -declspec (dllexport) SaveTGA( const char *, HGLOBAL ); 第三章 VC圖像編程基礎(chǔ) / TIF / hDib filenameHGLOBAL- -declspec (dllexport) LoadTIF( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dllexpor
25、t) GetTIFInfo(const char *, int *, int *, int *, int *, int * ); / Success filename hDibBOOL- -declspec (dllexport) SaveTIF( const char *, HGLOBAL ); 第三章 VC圖像編程基礎(chǔ) / JPG / hDib filenameHGLOBAL- -declspec (dllexport) LoadJPG( const char * );/ Success filename w h planes bits colorsBOOL- -declspec (dll
26、export) GetJPGInfo( const char *, int *, int *, int *, int *, int * );/ Success filename hDibBOOL- -declspec (dllexport) SaveJPG( const char *, HGLOBAL, int ); 第三章 VC圖像編程基礎(chǔ) / PALETTE / Count RGB History Colormap MaxColorsWORD- -declspec (dllexport) MedianCut( WORD Hist, BYTE ColMap3, int );WORD- -de
27、clspec (dllexport) Popularity(ZK( unsigned char *pBits, int nBits, int nWidth, int nHeight, BYTE ColorMap3 );ZK) #ifdef - - cplusplus#endif 第三章 VC圖像編程基礎(chǔ) 另外,為處理出錯(cuò)信息,還定義了一個(gè)ImageErros.h文件來聲明讀寫圖像文件時(shí)的錯(cuò)誤代碼,其內(nèi)容如下: / ImageErros.h#ifndef- -ERRORS_H- -#define- -ERRORS_H- - #define IMAGELIB_SUCCESS 0第三章 VC圖像編程
28、基礎(chǔ) / File errors#define IMAGELIB_FILE_OPEN_ERROR 1#define IMAGELIB_FILE_CREATION_ERROR-2#define IMAGELIB_FILE_WRITE_ERROR-3#define IMAGELIB_FILE_READ_ERROR-4/ Memory erros#define IMAGELIB_MEMORY_ALLOCATION_ERROR -50#define IMAGELIB_MEMORY_LOCK_ERROR-51 第三章 VC圖像編程基礎(chǔ) / Argument errors#define IMAGELIB_
29、NODIB -100 / Operate errors#define IMAGELIB_UNSUPPORTED_FILETYPE -200#define IMAGELIB_HDIB_NULL -201#define IMAGELIB_LOGICAL_PALETTE_CREATION_ERROR -202#define IMAGELIB_NO_PALETTE_FOR_HIGH_COLOR-203#define IMAGELIB_STRETCHDIBITS_ERROR-204#define IMAGELIB_PALETTE_QUANTIZE_ERROR-205#define IMAGELIB_AT
30、TEMPT_CHANGE_TO_SAME-206#define IMAGELIB_ROTATION_VALUE_ERROR-207#define IMAGELIB_ROTATE_ERROR-208 #endif第三章 VC圖像編程基礎(chǔ) 3.3.2 ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)的使用動(dòng)態(tài)鏈接庫(kù)的使用 要使用ImageLoad.dll動(dòng)態(tài)鏈接庫(kù), 需如下四個(gè)步驟: (1)將ImageLoad.dll拷貝到應(yīng)用程序所在的目錄、 Windows目錄、 WindowsSystem目錄或WindowsSystem32目錄。 (2)將ImageErros.h、 ImageLoad.h兩個(gè)頭文件及Im
31、ageLoad.lib庫(kù)文件拷貝到當(dāng)前工程目錄或是在VC+集成開發(fā)環(huán)境中設(shè)置其所在的路徑。 第三章 VC圖像編程基礎(chǔ) (3) 用VC+的ProjectAdd to projectFiles.菜單將ImageLoad.lib添加到工程中。 (4) 在要用到ImageLoad.dll的C+頭文件(.h)或?qū)崿F(xiàn)文件(.cpp)中用#include ImageErros.h和#include ImageLoad.h兩個(gè)語句將兩個(gè)頭文件包含到應(yīng)用程序的設(shè)計(jì)中。 這樣就可以利用ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)提供的相應(yīng)函數(shù), 來完成六種格式圖像文件的讀寫操作。 第三章 VC圖像編程基礎(chǔ) 3.3 設(shè)計(jì)設(shè)
32、計(jì)CDibObject類類 由于MFC沒有封裝處理與DIB位圖相關(guān)的Windows API函數(shù)的類,所以本著面向?qū)ο蟮乃枷耄斜匾O(shè)計(jì)一個(gè)CDibObject類來完成如下功能: 讀取某種類型的圖像文件; 獲取圖像的相關(guān)信息; 顯示圖像; 以相同或不同類型格式的圖像文件保存該圖像。從而在以后的數(shù)字圖像處理中,可方便地將CDibObject類添加進(jìn)設(shè)計(jì)的工程中以完成相應(yīng)的處理。 第三章 VC圖像編程基礎(chǔ) 3.3.1 公用方法的設(shè)計(jì)公用方法的設(shè)計(jì) 根據(jù)對(duì)CDibObject類的基本要求, 它至少應(yīng)該具有下述方法(成員函數(shù)): (1) 構(gòu)造函數(shù):該類應(yīng)提供三個(gè)不同版本的構(gòu)造函數(shù), 一個(gè)是無參構(gòu)造函數(shù),
33、用于動(dòng)態(tài)創(chuàng)建對(duì)象;一個(gè)是接受文件名作為參數(shù)的構(gòu)造函數(shù),用于創(chuàng)建一個(gè)與由文件名指定的圖像文件相對(duì)應(yīng)的有意義的對(duì)象;另外,還應(yīng)提供一個(gè)復(fù)制構(gòu)造函數(shù), 以便將一個(gè)CDibObject類對(duì)象的屬性直接復(fù)制到另一個(gè)CDibObject類對(duì)象中。 第三章 VC圖像編程基礎(chǔ) (2) Load()函數(shù): 該函數(shù)將一個(gè)圖像文件裝入CDibObject類對(duì)象,它以接受的文件名作為參數(shù)。 (3)Save()函數(shù):該函數(shù)用指定的文件名將保存在CDibObject類對(duì)象中的當(dāng)前圖像保存為一個(gè)圖像文件,該文件名同時(shí)也應(yīng)指定保存圖像的文件類型。 (4) Draw()函數(shù):該函數(shù)在指定的設(shè)備描述表上繪制圖像, 它應(yīng)接受指向該
34、設(shè)備環(huán)境的指針作為參數(shù)。調(diào)用此繪圖函數(shù)時(shí), 也應(yīng)該指定繪制圖像的位置坐標(biāo)。 第三章 VC圖像編程基礎(chǔ) (5) 與圖像信息有關(guān)的函數(shù): 即一系列用于獲取和設(shè)置類屬性的Get/Set函數(shù)。這些函數(shù)用來獲取和設(shè)置圖像的各種信息, 如圖像的類型、 高度、寬度、位平面數(shù)、單個(gè)像素的位數(shù)、圖像使用的顏色數(shù)等。 (6)與調(diào)色板操作有關(guān)的函數(shù):即用于創(chuàng)建、獲取、設(shè)置邏輯或系統(tǒng)調(diào)色板的顏色數(shù)和調(diào)色板數(shù)據(jù)等信息的函數(shù)。 第三章 VC圖像編程基礎(chǔ) 3.3.2 類屬性的設(shè)計(jì)類屬性的設(shè)計(jì) CDibObject類主要應(yīng)設(shè)計(jì)如下屬性(成員變量): (1) char *m_pszFilename: 此變量用來保存圖像文件名。
35、 (2) int m_nImageType:此變量用來保存圖像類型, 圖像類型由文件“ImageLoad.h”定義。值得注意的是,圖像的類型必須使用“ImageLoad.h”定義的原始順序, 它與“ImageLoad.dll” 中的函數(shù)FileType返回的int類型的值相對(duì)應(yīng),對(duì)此不能進(jìn)行改變。 第三章 VC圖像編程基礎(chǔ) (3) char szExtensions: 這是一個(gè)數(shù)組變量, 用來保存圖像文件的擴(kuò)展名(即在打開文件對(duì)話框中的文件過濾器), 其值為 .BMP、 .GIF、 .PCX、 .TGA、 .JPG、 .TIF和(空字符串)。 (4) HGLOBAL m_hDib: 當(dāng)圖像載入
36、后, 使用此變量獲取該圖像的DIB(Device Independent Bitmap設(shè)備無關(guān)位圖)句柄。實(shí)際上無論什么類型的圖像文件, 如果要在Windows操作系統(tǒng)中顯示, 都應(yīng)該使用DIB位圖格式。 第三章 VC圖像編程基礎(chǔ) (5)int m_nWidth, m_nHeight, m_nPlanes, m_nBits, m_nColors:這些變量分別描述圖像的寬度、 高度、 位平面數(shù)、 每像素的位數(shù)(1、 4、 8、 16、 24或32位)和顏色數(shù)。 (6) int m_nX, m_nY: 用這兩個(gè)變量確定繪制圖像的左上角位置。 (7) CPalette m_Palette: 此變量指
37、定圖像中使用的調(diào)色板對(duì)象。 第三章 VC圖像編程基礎(chǔ) (8) int m_nPaletteCreationType: 當(dāng)需要通過顏色還原一幅具有調(diào)色板的圖像時(shí),使用此變量確定調(diào)色板類型。其中, 0表示JGPT_POPULARITY_PALETTE,1表示JGPT_MEDIAN_CUT_PALETTE, 2表示JGPT_FIXED_PALETTE。 (9) LOGPALETTE *m_pLogPal: 該指針型變量用來指向圖像所使用的邏輯調(diào)色板。 (10) int m_nQuality: 使用此變量描述JPEG圖像的壓縮質(zhì)量。該值為0到100之間的整數(shù),其值越大,圖像質(zhì)量越好,但文件尺寸也將越大
38、。 第三章 VC圖像編程基礎(chǔ) (11) int m_nLastError:該變量用來保存最后一次圖像處理中的錯(cuò)誤號(hào),錯(cuò)誤號(hào)由“ImageErros.h”頭文件定義。 對(duì)于CDibObject類的構(gòu)造函數(shù)、 載入和保存成員函數(shù)以及大多數(shù)Set/Get成員函數(shù)的意義都是暗含的,在此不再詳細(xì)討論。請(qǐng)讀者閱讀本書所附CD-ROM中的CDibObject類定義文件“DibObject.h”和實(shí)現(xiàn)文件“DibObject.cpp”,作者在程序源代碼中加入了詳盡的注釋,相信讀者能夠理解。 第三章 VC圖像編程基礎(chǔ) 3.4 使用使用CDibObject類類3.4.1 添加添加CDibObject類定義文件類定
39、義文件 將 “DibObject.h” 和 “DibObject.cpp” 兩個(gè)文件復(fù)制到當(dāng)前工程目錄。 選擇VC+集成開發(fā)環(huán)境的ProjectAdd to projectFiles.菜單項(xiàng),系統(tǒng)打開如圖3-4所示的 “Insert Files into Project” 對(duì)話框。 第三章 VC圖像編程基礎(chǔ) 圖3-4 在工程中添加“DibObject.h” 和 “DibObject.cpp” 選擇文件“DibObject.h”和“DibObject.cpp”,單擊“OK”將這兩個(gè)文件添加到當(dāng)前工程中。這樣便將上一節(jié)所設(shè)計(jì)的CDibObject類添加到當(dāng)前的工程中,從而可以使用類中提供的方法和屬
40、性。 第三章 VC圖像編程基礎(chǔ) 3.4.2 設(shè)置工程選項(xiàng)設(shè)置工程選項(xiàng) 要使用ImageLoad.dll動(dòng)態(tài)鏈接庫(kù),如前所述,先將其拷貝至Windows系統(tǒng)目錄下(Windows 95/98為“System”目錄, Windows 2000/XP/NT為“System32”目錄)或?qū)⑵鋸?fù)制到編譯后的應(yīng)用程序當(dāng)前目錄(“Debug”或“Release”目錄)。再將與ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)相關(guān)的“ImageLoad.h”、 “ImageLoad.lib”和“ImageErros.h”復(fù)制到當(dāng)前工程目錄。選擇VC+集成開發(fā)環(huán)境的ProjectSettings.菜單項(xiàng), 系統(tǒng)打開如圖 3
41、- 5 所 示 的 “ P r o j e c t S e t t i n g s ” 對(duì) 話 框 , 在“Object/Library modules”編輯框中輸入“ImageLoad.lib”, 單擊“OK”。如此便可在應(yīng)用程序中使用ImageLoad.dll動(dòng)態(tài)鏈接庫(kù)提供的多格式圖像文件的打開和保存函數(shù), 輕松完成圖像文件的讀寫工作。 第三章 VC圖像編程基礎(chǔ) 圖3-5 “Project/Settings”對(duì)話框 第三章 VC圖像編程基礎(chǔ) 3.5 CDibObject類應(yīng)用實(shí)例類應(yīng)用實(shí)例 3.5.1 建立應(yīng)用程序框架建立應(yīng)用程序框架 使用MFC AppWizard創(chuàng)建圖像處理應(yīng)用程序基本
42、框架, 其步驟如下: (1) 從File菜單中選擇New菜單項(xiàng), 彈出New對(duì)話框。 (2) 選擇Projects選項(xiàng)卡,從項(xiàng)目類型列表中選擇MFC AppWizard(.exe), 在ProjectsName文本框中輸入項(xiàng)目名稱, 這里設(shè)為Dip。 (3) 在MFC AppWizard-Step 1對(duì)話框中選擇MDI用戶界面和中文中國(guó)。 第三章 VC圖像編程基礎(chǔ) (4) 在MFC AppWizard-Step 6對(duì)話框中將CDipView類的基類改為CScrollView以支持視圖滾動(dòng)。 (5) 其他各選項(xiàng)采用默認(rèn)值。 (6) 單擊Finish按鈕,再單擊OK,MFC AppWizard將自
43、動(dòng)生成圖像處理程序的各個(gè)源文件。 第三章 VC圖像編程基礎(chǔ) 3.5.2 添加消息映射函數(shù)添加消息映射函數(shù) 因?yàn)閼?yīng)用程序類CDipApp帶有自己的“文件新建”和“文件打開”菜單,在此為這兩個(gè)菜單項(xiàng)添加消息映射處理函數(shù)。使用MFC ClassWizard分別為ID_FILE_NEW和ID_FILE_OPEN兩個(gè)菜單命令消息添加“OnFileNew”和“OnFileOpen”。 MFC AppWizard自動(dòng)生成的Dip應(yīng)用程序框架在運(yùn)行時(shí)會(huì)自動(dòng)打開一個(gè)新的空白子窗口。若不希望出現(xiàn)此窗口,可以簡(jiǎn)單地聲明OnFileNew函數(shù),但不編寫任何代碼。 第三章 VC圖像編程基礎(chǔ) 3.5.3 改寫改寫OnFi
44、leOpen函數(shù)以打開圖像文件函數(shù)以打開圖像文件 在Dip.cpp文件頭部添加如下代碼: char szFilter =位圖文件(*.BMP)|*.BMP|圖形交換格式文件(*.GIF)|*.GIF|PCX文件(*.PCX)|*.PCX|TGA文件(*.TGA)|*.TGA|JPEG文件(*.JPG)|*.JPG|標(biāo)記圖像文件(*.TIF)|*.TIF|所有支持圖片|*.BMP, *.GIF, *.PCX, *.TGA, *.JPG, *.TIF|所有文件(*.*)|*.*|; 第三章 VC圖像編程基礎(chǔ) 在此聲明的字符數(shù)組szFilter保存了文件打開和關(guān)閉對(duì)話框的過濾器數(shù)組。szFilter
45、是一個(gè)包含有通配符的以“|”字符分隔的字符串。要注意的是, 在第一個(gè)“|”字符之前是將要顯示在文件打開和保存對(duì)話框的“文件類型”列表框中的信息, 第二個(gè)“|”字符和第一個(gè)“|”字符之間的內(nèi)容為對(duì)話框的過濾器內(nèi)容。在字符串szFilter的尾部, 使用兩個(gè)“|”字符而不是一個(gè), 表示過濾器內(nèi)容結(jié)束。 注意: szFilter中不能包含任何空格,并且聲明為全局變量。 第三章 VC圖像編程基礎(chǔ) 成員函數(shù)CDip: OnFileOpen負(fù)責(zé)打開一個(gè)圖像文件, 其代碼如下: void CDipApp: OnFileOpen() static int nIndex = 1; CFileDialog Fil
46、eDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter ); FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex; if( FileDlg.DoModal() = IDOK ) CString PathName = FileDlg.GetPathName(); PathName.MakeUpper(); OpenDocumentFile( PathName ); nIndex = (int) FileDlg.m_ofn.nFilterIndex; 第三章 VC圖像編程基礎(chǔ) 程序中聲明一個(gè)CFileDialog類的
47、對(duì)象FileDlg, 其第一個(gè)參數(shù)設(shè)置為TRUE, 表示該對(duì)話框?yàn)椤按蜷_”對(duì)話框, 其最后一個(gè)參數(shù)為設(shè)置好的過濾器數(shù)組, 其他參數(shù)可參閱VC+幫助系統(tǒng)MSDN。程序接下來將FileDlg對(duì)象的m_ofn結(jié)構(gòu)的nFilterIndex字段設(shè)置為缺省的第一個(gè)過濾器值,并調(diào)用FileDlg.DoModal()成員函數(shù)顯示“打開”對(duì)話框。 成員函數(shù)FileDlg.GetPathName()負(fù)責(zé)返回選擇的包含完整路徑 信 息 的 文 件 名 , 應(yīng) 用 程 序 類 C D i p A p p 的 成 員 函 數(shù)OpenDocumentFile將使用該文件名創(chuàng)建一個(gè)文檔。 第三章 VC圖像編程基礎(chǔ) 3.5
48、.4 添加添加CDibObject類對(duì)象成員變量類對(duì)象成員變量 文檔類CDipDoc負(fù)責(zé)維護(hù)文檔的具體數(shù)據(jù)。因此, 在該類中聲明兩個(gè)公有型的成員變量: public:BOOL m_bImageLoaded;CDibObject *m_pDibObject; 其中,m_pDibObject為指向CDibObject類的指針, 它將用于保存從圖像文件中獲取的圖像。成員變量m_bImageLoaded聲明為BOOL型, 用來記錄圖像是否讀入內(nèi)存。 第三章 VC圖像編程基礎(chǔ) 另外,聲明的指針型變量還應(yīng)在類的構(gòu)造函數(shù)和析構(gòu)函數(shù)中正確的初始化和釋放。為此,在CDipDoc類的構(gòu)造函數(shù)和析構(gòu)函數(shù)中添加如下代
49、碼:CDipDoc: CDipDoc() / TODO: add onetime construction code here m_pDibObject = NULL; m_bImageLoaded = FALSE;CDipDoc: CDipDoc() if(m_pDibObject != NULL) delete m_pDibObject; m_pDibObject = NULL; 第三章 VC圖像編程基礎(chǔ) 注意:當(dāng)刪除了指針?biāo)赶虻膶?duì)象時(shí),相應(yīng)的指針本身并沒有刪除,此時(shí)指針變量本身的值指向何處就無法知道了,因此,再次將它賦值為NULL。要使程序能夠正確編譯, 還必須在文件中添加定義CDib
50、Object的頭文件, 可以在“DipDoc.h”文件的頭部用#include將“DibObject.h”文件包含進(jìn)來。但考慮到工程中多處將用到CDibObject類,以及“DibObject.h”文件將很少再改動(dòng),所以將其直接包含在“StdAfx.h”文件中比較合適, 于是在“StdAfx.h”文件中添加如下代碼: #include DibObject.h 第三章 VC圖像編程基礎(chǔ) 3.5.5 為為CDipDoc文檔類映射消息處理函數(shù)文檔類映射消息處理函數(shù) 使 用 M F C C l a s s Wi z a r d 分 別 為 I D _ F I L E _ N E W 、 ID_FILE
51、_OPEN、 ID_FILE_SAVE AS菜單命令消息添加消息映射處理函數(shù)OnFileNew()、 OnFileOpen()和OnFileSaveAs()函數(shù)。 (1) ID_FILE_NEW消息處理函數(shù)代碼如下:void CDipDoc: OnFileNew() / TODO: Add your command handler code here 與CDipApp類處理一樣,CDipDoc類的消息映射函數(shù)OnFileNew()什么也不干,以防止自動(dòng)打開一個(gè)新的空白子窗口。 第三章 VC圖像編程基礎(chǔ) (2) ID_FILE_OPEN的消息處理函數(shù)代碼如下: HT5”Kvoid CDipDoc
52、: OnFileOpen() / TODO: Add your command handler code here static int nIndex = 1;CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter ); FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex; if( FileDlg.DoModal() = IDOK ) 第三章 VC圖像編程基礎(chǔ) CString strPathName = FileDlg.GetPathName(); AfxGetApp()-OpenD
53、ocumentFile( strPathName ); nIndex = (int) FileDlg.m_ofn.nFilterIndex; if( !ReadImgToDoc() ) AfxMessageBox(無法載入圖像文件!); return; 第三章 VC圖像編程基礎(chǔ) 在CDipDoc類的消息映射函數(shù)OnFileOpen()中, 除了要調(diào)用一個(gè)CDipDoc類的公有成員函數(shù)ReadImgToDoc()外(該函數(shù)將在后面進(jìn)行說明), 其他與CDipApp類消息映射函數(shù)OnFileOpen()基本一樣。 注意:在此再一次使用了數(shù)組szFilter,但它并不在“DipDoc.h”和“Dip
54、Doc.cpp”兩個(gè)文件中聲明,因此需要在“DipDoc.cpp”頭部添加如下外部聲明信息。 第三章 VC圖像編程基礎(chǔ) / DipDoc.cpp : implementation of the CDipDoc class/#include stdafx.h#include Dip.h#include DipDoc.h#include MainFrm.h#include ChildFrm.h#include DipView.h 第三章 VC圖像編程基礎(chǔ) #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE=
55、 - -FILE- -;#endif extern char szFilter; 第三章 VC圖像編程基礎(chǔ) 在文件“DipDoc.cpp”中同時(shí)還包含了“MainFrm.h”、 “ChildFrm.h”和“DipView.h”三個(gè)頭文件, 因?yàn)镃DipDoc類的成員函數(shù)必須使用它們鏈接指定的代碼。 成員函數(shù)ReadImgToDoc()負(fù)責(zé)讀入圖像對(duì)象文件, 其聲明與實(shí)現(xiàn)文件如下。 在“DipDoc.h”文件添加如下代碼: 第三章 VC圖像編程基礎(chǔ) /函數(shù)聲明public: BOOL ReadImgToDoc();在“DipDoc.cpp”文件添加代碼: /函數(shù)實(shí)現(xiàn)BOOL CDipDoc: R
56、eadImgToDoc() CString strPathName = GetPathName(); 第三章 VC圖像編程基礎(chǔ) /設(shè)置等待光標(biāo) BeginWaitCursor(); m_pDibObject = new CDibObject( strPathName.GetBuffer(3) ); /取消等待光標(biāo) EndWaitCursor(); /讀入圖像文件失敗 if( m_pDibObject = NULL ) AfxMessageBox(無法創(chuàng)建圖像類對(duì)象!); 第三章 VC圖像編程基礎(chǔ) /返回FALSE return(FALSE); /讀入圖像文件成功, 設(shè)置相應(yīng)變量 m_bImag
57、eLoaded = TRUE; /返回TRUE return(TRUE); 在ReadImgToDoc()成員函數(shù)中,首先設(shè)置等待光標(biāo),然后,以文件打開對(duì)話框返回的文件名為參數(shù)調(diào)用CDibObject類的構(gòu)造函數(shù)創(chuàng)建CDibObject對(duì)象m_pDibObject,從而將圖像文件中保存的圖像數(shù)據(jù)讀入內(nèi)存,并將文檔類的m_bImageLoaded設(shè)為TRUE。 第三章 VC圖像編程基礎(chǔ) (3) ID_FILE_SAVE_AS消息處理函數(shù)代碼如下: void CDipDoc: OnFileSaveAs() / TODO: Add your command handler code here sta
58、tic int nIndex = 1; CFileDialog DialogSaveAs(FALSE, NULL, m_pDibObject-GetImageName(), OFN_HIDEREADONLY, szFilter ); DialogSaveAs.m_ofn.nFilterIndex = (DWORD) nIndex; if( DialogSaveAs.DoModal() = IDOK ) 第三章 VC圖像編程基礎(chǔ) CMainFrame *pMainFrame = ( CMainFrame *)AfxGetMainWnd(); CChildFrame *pChildFrame =
59、(CChildFrame * ) pMainFrame-MDIGetActive(); CDipView *pDipView = ( CDipView * )pChildFrame-GetActiveView(); nIndex = (int) DialogSaveAs.m_ofn.nFilterIndex; if( nIndex = 5 ) if( m_pDibObject-GetNumBits() != 24 ) AfxMessageBox(24位真彩色圖像才能存為JPEG格式!); return; 第三章 VC圖像編程基礎(chǔ) if( m_pDibObject != NULL ) CStri
60、ng strPathName = DialogSaveAs.GetPathName(); int nFindIndex = strPathName.Find(.); if( nFindIndex != -1) strPathName = strPathName.Left( nFindIndex ); strPathName += CDibObject: : szExtensionsnIndex -1 ; m_pDibObject-Save( strPathName ); CString strFileName = DialogSaveAs.GetFileName(); nFindIndex =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公自動(dòng)化題目及答案
- 2025年教育信息化基礎(chǔ)設(shè)施對(duì)教育信息化應(yīng)用場(chǎng)景拓展的影響報(bào)告
- 安全員考試題及答案
- 安全試題及答案填空
- 安全生產(chǎn)知識(shí)競(jìng)賽題庫(kù)及答案
- 2025年醫(yī)療行業(yè)人才流動(dòng)趨勢(shì)分析報(bào)告:人才培養(yǎng)與流動(dòng)的數(shù)字化路徑
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)數(shù)字水印技術(shù)解析:2025年數(shù)據(jù)安全防護(hù)技術(shù)路線圖報(bào)告
- 舞蹈體驗(yàn)培訓(xùn)課件模板
- 《電子信息專業(yè)英語》(第3版) 課件 Chapter 6-9 Communication System通信系統(tǒng) - Electronics Occupation 電子職業(yè)工作
- 中國(guó)北京美術(shù)課件
- 持續(xù)葡萄糖監(jiān)測(cè)臨床應(yīng)用專家共識(shí)2024解讀
- 《冠心病的規(guī)范化診》課件
- 《數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)》 課件7.2.1 K-Means聚類
- 2025年圍產(chǎn)期保健工作計(jì)劃
- 2024年基本公共衛(wèi)生服務(wù)人員培訓(xùn)計(jì)劃
- 邊坡掛網(wǎng)噴漿應(yīng)急響應(yīng)方案
- 浙大城市學(xué)院《操作系統(tǒng)原理》2021-2022學(xué)年第一學(xué)期期末試卷
- 食品過敏原培訓(xùn)
- 2024年第六屆全國(guó)農(nóng)業(yè)行業(yè)職業(yè)技能大賽動(dòng)物疫病防治員技能競(jìng)賽理論考試題庫(kù)(含答案)
- 河流沖刷計(jì)算公式(在黃色的格內(nèi)填入數(shù)據(jù)即可)
- 2024年全國(guó)《汽車加氣站操作工》安全基礎(chǔ)知識(shí)考試題庫(kù)與答案
評(píng)論
0/150
提交評(píng)論