freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于mfc的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文(存儲(chǔ)版)

  

【正文】 ,使其與源圖像的坐標(biāo)不同。 借助于循環(huán)和對(duì) LanImage::Draw()函數(shù)的參數(shù)進(jìn)行變換,以達(dá)到特效顯示的效果。 結(jié)束 順時(shí)針?lè)D(zhuǎn) 是否為 8 位圖像 Y 寬度 是否為 32位 翻轉(zhuǎn) 高度 N N Y Y 開(kāi)始 27 步驟 2: 計(jì)算出此圖像水平和垂直方向可以分的塊數(shù)。 資源的分配和釋放 由于 Visual C++中內(nèi)存資源的分配和釋放均由程 序員控制,而本程序多處在內(nèi)存中開(kāi)辟緩沖區(qū),因此在本設(shè)計(jì)的實(shí)現(xiàn)過(guò)程中,對(duì)內(nèi)存的管理尤為重要。 =NULL。 } } else ()。 m_pJpeg=new CJpeg()。 30 m_nBitCount=pDibGetBitCount()。 =m_nWidth。 //如果打開(kāi)的圖片 BitCount8則無(wú)調(diào)色板 if(m_nBitCount8) =0。 if (hDIB==NULL) return FALSE。 GlobalUnlock(hDIB)。 *pDib=new CDib()。 if(m_nBitCount8) hDIB=GlobalAlloc(GHND, dwHeaderSize+dwBitsSize)。 =0。 HDIB hDIB。 //獲取 DIB數(shù)據(jù)區(qū)指針 m_nWidth=pDibGetWidth()。 ( 1)打開(kāi)圖像時(shí)的緩沖區(qū)轉(zhuǎn)換 JPEG 和 GIF 讀寫庫(kù)中使用一個(gè) CDib 類保存圖像的數(shù)據(jù),即是以 DIB 格式存儲(chǔ)的,而此類中提供了獲得圖像數(shù)據(jù)區(qū)指針及其圖像屬性 的方法,因此,利用這些接口,即可將緩沖區(qū)轉(zhuǎn)換為 LanImage 中使用的類型。 =NULL。 if(!) //進(jìn)行過(guò)變換 delete [] 。 4 系統(tǒng)的關(guān)鍵技術(shù)及難點(diǎn) 在兩個(gè)多月的學(xué)習(xí)與工作中,我完成了一個(gè)完整的基于 MFC 的圖片瀏覽器的設(shè)計(jì)?;静襟E如下。 下面以 8 位和 32 位的圖像來(lái)說(shuō)明旋轉(zhuǎn)操作的算法,而需要進(jìn)行位操作的圖像的旋轉(zhuǎn)方法在后面進(jìn)行詳細(xì)說(shuō)明,這里不再贅述。本函數(shù)中由于改變了圖像的顯示大小,故“顯示比例”一項(xiàng)需要更新,而 m_Llower_rate 即為圖像當(dāng)前的顯示比例,此變量 在 CPictViewView 類中定義。 nSw:源區(qū)域?qū)挾取?23 } LanImage 類中的 Draw()函數(shù)定義如下: BOOL LanImage::Draw(HDC hdc,int nDx,int nDy,int nDw,int nDh, int nSx,int nSy,int nSw,int nSh,UINT uFlags)const 此函數(shù)調(diào)用 MFC 函數(shù) DrawDibDraw()來(lái)實(shí)現(xiàn)圖像的顯示,函數(shù)各參數(shù)的意義如下。 //獲取用戶區(qū)矩形 m_nWindowWidth=。因 此,如果使用特效時(shí)不加處理,那么會(huì)在每次軟件界面被遮擋并恢復(fù)時(shí)以動(dòng)畫方式重新顯式一次圖像,這會(huì)讓人感覺(jué)很不舒服。然而,由于第三方讀寫庫(kù)所使用的保存圖像信息的數(shù)據(jù)結(jié)構(gòu),尤其是圖像解碼后的數(shù)據(jù)緩沖區(qū)與本設(shè)計(jì)有較大的區(qū)別,故對(duì)于這兩種圖像格式,進(jìn)行緩沖區(qū)格式的轉(zhuǎn)換就較為重要。 //Count臨時(shí)變量 memcpy (OutBuffer, pBak, Count)。 Data=Next。Next, InBuffer, iColorBit)。 //記數(shù)指針 memcpy (amp。 20 OutBuffer +=Num。 for(int i=0。 ( 1) TGA 圖像的解碼 TGA 的解碼是由 LanImage::ReadTga()函數(shù)實(shí)現(xiàn)的,其關(guān)鍵是調(diào)用解碼一行 TGA 圖像數(shù)據(jù)的函數(shù) RLE_TGA_DecodeLine(),其代碼如下: static BYTE * RLE_TGA_DecodeLine(BYTE * InBuffer,int iColorBit, int iNumPixel,BYTE * OutBuffer) { register BYTE Data。 BYTE byColorBits。 //調(diào)色板類型: 0無(wú)調(diào)色板, 1有調(diào)色板 BYTE byImageType。0xc0)==0xc0) /* pixel value 192 ? */ { fputc(0xc1, fp)。((t+i)(WORD)bytes)amp。 PCX 圖像的調(diào)色板使用如下結(jié)構(gòu)體實(shí)現(xiàn): typedef struct tagPCXPALETTE { BYTE rgbRed??梢灾苯訉⑵渥x出并放入緩沖區(qū)中。 BOOL SaveTga(LPCTSTR pszFileName)const。 if(m_pPal) { delete [] m_pPal。 //m_hBitmap 中包含了 m_pImage 最初指向的區(qū)域 else if(m_bReadWithLibSupport) //如果使用了 Lib Sources,這時(shí) m_pImage 指 //向的是原來(lái) CJpeg 類的一部分空間, m_pImage=NULL。 //指向調(diào)色板區(qū)域的指針 LanFormat m_eFmt。 //圖像文件大小 // //當(dāng)被旋轉(zhuǎn)時(shí)保存原來(lái)的圖像可能被改變的信息 BYTE * m_pOriginImage。 //圖像實(shí)際寬度 int m_nHeight。 軟件核心數(shù)據(jù)結(jié)構(gòu) LanImage 類 由上面對(duì)圖像格式的分析可知,不同的圖像格式,其解碼和編碼方式有相當(dāng)大 的區(qū)別,故將不同圖像的解碼、編碼劃分為單獨(dú)的模塊;然而,不論原圖像是何種格式,在解碼之后都會(huì)暫時(shí)以 RGB 的顏色數(shù)據(jù)存儲(chǔ)在內(nèi)存中的一塊緩沖區(qū)中。 軟件界面設(shè)計(jì) 根據(jù)軟件的需求分析及圖片瀏覽軟件的特點(diǎn),本設(shè)計(jì)中軟件采用單文檔界面( SDI),包括標(biāo)準(zhǔn)菜單 、工具欄和狀態(tài)欄。 模塊劃分 本設(shè) 計(jì)的實(shí)現(xiàn)基于微軟的 MFC 應(yīng)用程序框架,故軟件也采用了文檔( Document) /視圖( View)結(jié)構(gòu),并使用單文檔界面( Single Document Interface,簡(jiǎn)稱 SDI)。 在查看圖片時(shí),可以選擇從當(dāng)前目錄中刪除該圖片,并將其放入系統(tǒng)回收站中。旋轉(zhuǎn)。 9 3 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 在整個(gè)畢業(yè)設(shè)計(jì)期間,我通過(guò)需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)三個(gè)階段完成了整個(gè)設(shè)計(jì)過(guò)程。條目宏定義了類所處理的消息與其對(duì)應(yīng)的函數(shù)。其參數(shù)指定了用戶接口的標(biāo)識(shí)號(hào),如菜單項(xiàng)和按鈕等 ID 號(hào)。這些操作由操作系統(tǒng)管理,操作系統(tǒng)檢測(cè)到操作事件后,便向相關(guān)的應(yīng)用程序發(fā)送消息,應(yīng)用程序響應(yīng)這些消息來(lái)完成用戶的操作。有的類封裝了大部分的 Win32 SDK 中應(yīng)用程序的編程接口函數(shù);有的類封裝的則是應(yīng)用程序本身的數(shù)據(jù)和操作;還有的類封裝了 ActiveX、 OLE 和 Inter 編程特性以及 WinSock 網(wǎng)絡(luò)特性和 DAO( Data Access Objects)、 ODBC( Open Database Connectivity)數(shù)據(jù)訪問(wèn)功能。 Win32 具有搶先式多任務(wù)、多線程和線性 尋址內(nèi)存管理等特征, Win32 編程的基本要求包括: 1) 應(yīng)用程序的執(zhí)行獨(dú)立于硬件設(shè)備。 4) MFC 庫(kù)應(yīng)用程序框架有豐富的特性,如: Windows API 的 C++接口、通用的(非Windows 所特有的)類、“共用根對(duì)象”類層次結(jié)構(gòu)、流線式多文檔界面( MDI)應(yīng)用程序支持等。應(yīng)用程序框架是類庫(kù)的超集。 ClassWizard 能把對(duì)話框模板與生成的類定義或與已有的類代碼連接起來(lái),為菜單項(xiàng)、控制等資源生成空的處理函數(shù)模板,創(chuàng)建消息映射條目,并將資源 ID 與處理函數(shù)連接起來(lái)。同樣的運(yùn)算,使用 Java 和 C所需的內(nèi)存比使用 C++所需的內(nèi)存要多,即內(nèi)存的使用率較低。 圖像處理需要處理大量的圖像數(shù)據(jù),經(jīng)常使用復(fù)雜、費(fèi)時(shí)的算法,因此圖像處理程序的效率非常重要。盡管有些文件被壓縮,但仍屬于位圖圖像的范疇,通常這些類型的圖像包含頭信息和原始圖像數(shù)據(jù)。 與計(jì)算機(jī)圖像相關(guān)的一個(gè)領(lǐng)域就是計(jì)算機(jī)圖形學(xué)。 鑒于數(shù)字圖像自身的特點(diǎn),對(duì)其進(jìn)行處理也不是一步就能完成的過(guò)程?;叵胍幌聢D像的模擬處理,為了要把處理精度提高一個(gè)數(shù)量級(jí),就要大幅度地改進(jìn)處理裝置,這在經(jīng)濟(jì)上是極不合算的。通常所說(shuō)的數(shù)字圖像處理是指用計(jì)算機(jī)對(duì)圖像信息進(jìn)行的處理,因 此也稱為計(jì)算機(jī)圖像處理( Computer Image Processing)。 本 論 文 對(duì) 圖片瀏覽器 的常用功能 進(jìn)行 設(shè)計(jì) 開(kāi)發(fā) ,包括 對(duì)圖片進(jìn)行讀、寫、顯示等功能,以及圖像處理中一些常用的變換算法,如圖像的放大、縮小、旋轉(zhuǎn)及百葉窗、馬賽克等顯示特效,并將這些功能集成 , 在 Microsoft Windows 2020/XP 下 測(cè)試通過(guò) ,其中重點(diǎn) 對(duì) 圖片瀏覽器 的 各種格式圖像編碼和解碼進(jìn)行詳細(xì)研究 。只要圖像在數(shù)字化時(shí)準(zhǔn)確地表現(xiàn)了原稿,則數(shù)字圖像處理過(guò)程始終能保持圖像的再現(xiàn)。這些來(lái)自不同信息源的圖像只要被變換為數(shù)字編碼形式后,均是用二維數(shù)組表示的灰度圖像(彩色圖像也是由灰度圖像組合成的,例如 RGB 圖像由紅、綠、藍(lán)三個(gè)灰度圖像組合而成),因而均可用計(jì)算機(jī)來(lái)處理。因此,掌握不同格式圖像的編碼解碼、讀寫、顯示等方法是必不可少的。 在計(jì)算機(jī)圖形學(xué)中,圖像數(shù)據(jù)的類型被分為兩個(gè)主要種類:矢量和位圖。 本設(shè)計(jì)所討論和處理的圖像均為位圖圖像。故從運(yùn)行效率的角度看,采用 C++進(jìn)行圖像編程比較合適。 Java 完全取消了指針, C極大地限制了指針的使用,這都限制了程序員施展技巧。然而,使用 Visual C++,開(kāi)發(fā)人員必須真正地閱讀和編寫C++代碼。 MFC 庫(kù)是 C++的 Microsoft Windows API。 MFC 框架的核心是文檔 /視圖結(jié)構(gòu)( DocumentView Architecture),這是一個(gè)很好用、但又往往較難以入門的功能。 4) 高性能的搶先式多任務(wù)和多線程管理。運(yùn)用 Visual C++的資源編輯器( Resource Editor)能直觀地設(shè)計(jì)程序的用戶界面,而 ClassWizard 能把用戶界面和程序代碼連接起來(lái)。 消息主要有以下 3 類。 框架將消息和它們的處理函數(shù)連接起來(lái)就是消息映射。例如,消息WM_PAINT 的處理函數(shù)在 CWnd 類中的聲明如下: afx_msg void OnPaint()。 不論打開(kāi)的是上述圖像中的哪一種,用戶均能以其中的任意一種格式將其保存。 可以進(jìn)行全屏幕瀏覽,并在全屏幕瀏覽時(shí)提供“幻燈片播放”的功能,自動(dòng)顯示當(dāng)前文件夾下的所有圖像。 性能需求 ( 1)硬件平臺(tái)要求 由于本軟件為單機(jī)軟件,不 需進(jìn)行大量的數(shù)據(jù)讀寫和數(shù)據(jù)交換,故對(duì)系統(tǒng)硬件配置的要求并不高,只要能夠平穩(wěn)運(yùn)行 Windows 操作系統(tǒng)的硬件平臺(tái) ,都能夠使用本軟件。 步驟 2: 程序運(yùn)行過(guò)程中,選擇“文件” |“打開(kāi)”命令,框 架將調(diào)用 CWinApp::OnFileOpen()函數(shù),并使用已創(chuàng)建的文檔模板創(chuàng)建文檔。 P i ct ure V i ew er Mo de l V i ew C on t rol l er 圖像解碼、編碼模塊 圖像顯示模塊 圖像變換模塊 PCX解碼 /編碼模塊 TGA解碼 /編碼模塊 BMP解碼 /編碼模塊 JPEG模塊 GIF模塊 OnDraw () 狀態(tài)欄信息顯示 圖像縮放模塊 圖像旋轉(zhuǎn)模塊 全屏瀏覽模塊 圖像顯示模塊 圖 2 軟件模塊劃分 12 軟件在非全屏狀態(tài)下的整體頁(yè)面如圖 3 所示。 由于圖像的顯示是在程序的視圖( View)中完成的,為了便于訪問(wèn) LanImage 中的方法和屬性,將 LanImage 類作為 View 類(本程序中為 CPictViewView)的公有成員。 //圖像顯示高度 int m_nBitCount。 Int m_nOriginPitch。 m_bReadWithLibSupport=FALSE。 m_pImage=NULL。 //載入圖像函數(shù) BOOL Create(int nWidth,int nHeight,int nBitCount,int ndegree, LanFormat eFmt=LanF_Unkown)。 BYTE * GetLine(int nLine) //取得掃描行中一行的數(shù)據(jù) { r
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1