BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告和C++手機(jī)資費(fèi)系統(tǒng)代碼與總結(jié)報(bào)告_第1頁
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告和C++手機(jī)資費(fèi)系統(tǒng)代碼與總結(jié)報(bào)告_第2頁
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告和C++手機(jī)資費(fèi)系統(tǒng)代碼與總結(jié)報(bào)告_第3頁
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告和C++手機(jī)資費(fèi)系統(tǒng)代碼與總結(jié)報(bào)告_第4頁
BMP文件圖像模糊化處理的設(shè)計(jì)報(bào)告和C++手機(jī)資費(fèi)系統(tǒng)代碼與總結(jié)報(bào)告_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《溝通與協(xié)作實(shí)訓(xùn)》實(shí)習(xí)報(bào)告專業(yè)班級:學(xué)號:姓名:第一部分認(rèn)知實(shí)習(xí)總結(jié)經(jīng)過這五天的認(rèn)知實(shí)習(xí)我收獲很大,首先是我們的東營之旅,回到我們的老校區(qū),在那里的食堂吃飯,看薈萃湖盛開的荷花,看“東營版”的創(chuàng)造太陽雕塑,參觀各個學(xué)院的辦公樓,教學(xué)樓,實(shí)驗(yàn)樓,包括宿舍,都讓我覺得有種新鮮感,那是種陌生又熟悉的感覺,作為石油大學(xué)的學(xué)生,看見老校區(qū)著實(shí)有種情切的感覺,尤其是來到我們計(jì)算機(jī)與通信工程學(xué)院樓前,腦中浮現(xiàn)出的是我的學(xué)長們在這所建筑物中拼搏的景象,聽見老師講述當(dāng)年的一切,我們都很感興趣心中充滿了好奇,暗暗為自己加油,希望有一天我們走出校門的時候,也能做出與我們學(xué)校名聲相配的成績,只有這樣才不會辱沒我們石油大學(xué)這六十年的光輝校史,只有這樣才對得起師長的教誨,只有這樣我們才能稱自己是石大人,因?yàn)槲覀冇衅D苦奮斗的傳統(tǒng),有令人羨慕的成績,我為你感到驕傲石油大學(xué)。之后我們來到了東營的中國聯(lián)通公司,在那里我們參觀了它的計(jì)算中心,我非常興奮,因?yàn)榈谝淮慰匆娔敲炊嗟木W(wǎng)線,和那么大的主機(jī),那么多的機(jī)器,之前我從未想過我所學(xué)習(xí)的軟件工程專業(yè)竟然需要這么多的設(shè)備來支持,我知道這些設(shè)備運(yùn)行的背后是靠著大量的代碼來支撐的,只是多么好的硬件和軟件相結(jié)合啊,讓我不禁感嘆這個計(jì)算機(jī)的世界真是太美秒了,它帶動著整個世界在飛速發(fā)展,而我有一天也會投身在這一行業(yè),發(fā)揮自己的力量,燃燒總記得光和熱,為社會奉獻(xiàn)自己的力量,第一次來聯(lián)通公司的內(nèi)部,感覺這里很神秘,在里面我們還了解到了GIS,看見工作人員通過電腦實(shí)時查看道路交通狀況,甚至連那個車在做什么有沒有在工作都看的一清二楚,我又一次感到自己要學(xué)的東西還有太多太多,自己不知道的世界還很大很大,自己要看清自己的渺小,通過不斷學(xué)習(xí)來充實(shí)自己的大腦,希望自己可以在計(jì)算機(jī)領(lǐng)域可以取得令自己滿意的成績,因?yàn)檫@個領(lǐng)域真的是太神奇了,如果只是表面的認(rèn)識我會覺得很失敗,因此我會努力學(xué)習(xí),在更深層次認(rèn)識計(jì)算機(jī),認(rèn)識軟件工程。之后我們參觀了東營軟件園,當(dāng)然只是一些簡單的參觀,聽工作人員的講解,雖然大部分不太懂,但是這樣反而會激起我們的學(xué)習(xí)興趣,大家對這次行程都感到很滿意,覺得很有意義,大約五點(diǎn)左右我們一行人啟程返回學(xué)校,一路上大家都在思考,今天的所見所聞對任何人來說都是一次絕妙的旅行,到達(dá)學(xué)校后回到宿舍大家又開始討論,忽然覺得計(jì)算機(jī)中有很大的樂趣,值得我們用一生來探求。第二天我們聽了學(xué)校網(wǎng)絡(luò)中心的老師介紹我校的一卡通系統(tǒng),知道了有關(guān)信息化校園的信息,了解了我們學(xué)校,數(shù)字化校園建設(shè)的進(jìn)程,以及一些我們之前不熟悉有關(guān)一卡通的知識,比如可以在網(wǎng)上繳費(fèi),在網(wǎng)上還可以做許多是,只是我們認(rèn)識的太少了,我校的一卡通系統(tǒng)還在進(jìn)一步的完善之中,完善后還會有更多的功能,我知道這些完善都是需要代碼來完成的,我有更進(jìn)一步的認(rèn)識到了軟件工程專業(yè)的重要性,以及想要做成智能化,信息化,數(shù)字化軟件工程都在其中起到了舉足輕重的作用,這更使我有信心學(xué)好自己的專業(yè),為學(xué)校為社會貢獻(xiàn)自己的力量,當(dāng)然知一切的前提是我們必須學(xué)好自己的專業(yè)知識。此外在認(rèn)知實(shí)習(xí)期間,我們還聽取了學(xué)校就業(yè)指導(dǎo)中心老師的報(bào)告,老師為我們就自己未來能做什么等方面做了深刻的講解,讓我們對自己有了更深的了解讓我們知道了堅(jiān)持自己的夢想的重要性,老師在不斷地鼓勵我們,提升我們的信心,讓我們對自己專業(yè)有了更清楚的認(rèn)識,讓我們知道了自己還有許多不知道的東西,外面的世界也是我們不曾接觸的,讓我們認(rèn)清了只要現(xiàn)在努力就會有美好的未來的事實(shí),我知道自己會面臨就業(yè)的問題,但是我相信只要我認(rèn)真的學(xué)習(xí),就業(yè)不會有問題,可能工資不高,但是只要我積累足夠的經(jīng)驗(yàn)就一定可以,但是我認(rèn)為更深一步的是我想對這個領(lǐng)域有更深刻的認(rèn)識,因?yàn)檫@樣一個精彩的世界我不能不參與,如果只是為了生存而學(xué)習(xí)我會覺得自己很失敗。在那之后,我們參觀了學(xué)校的計(jì)算中心,和我們計(jì)算機(jī)與通信工程學(xué)院的實(shí)驗(yàn)樓,看見在那里實(shí)習(xí)的學(xué)長們,并且?guī)ьI(lǐng)他們實(shí)習(xí)的老師也為我們做了關(guān)于他們實(shí)習(xí)內(nèi)容介紹,一些基本設(shè)施的介紹,在學(xué)校的計(jì)算中心我們看見了和在東營聯(lián)通公司同樣的設(shè)備,我認(rèn)識到原來自己每天都使用的網(wǎng)絡(luò)是通過這些大家伙來實(shí)現(xiàn)的,當(dāng)天晚上我們聽取了校網(wǎng)絡(luò)中心老師對我們的校園網(wǎng)做的介紹,發(fā)現(xiàn)有許多地方我們還是不了解,校園網(wǎng)的功能我們大部分都沒使用,例如進(jìn)入校園網(wǎng)自己的主頁只需進(jìn)入WWW.i.upc.edu.cn,在那里面有我們的個人信息,我們每個人都有一個自己的郵箱,等等。之后就是為了程序設(shè)計(jì)實(shí)習(xí)的準(zhǔn)備工作,李曉旭老師為我們講解了MFC類庫,并且要求我們在接下來的幾天查閱資料為了后面的實(shí)習(xí)做準(zhǔn)備,至此認(rèn)知實(shí)習(xí)全部結(jié)束,等待我們的是程序設(shè)計(jì)實(shí)習(xí)。經(jīng)過這幾天的認(rèn)知實(shí)習(xí),我收獲很大,認(rèn)識到自己要學(xué)的東西還有很多,自己在計(jì)算機(jī)的世界簡直太渺小了,唯有經(jīng)過不斷的努力才能學(xué)到新的知識,才能更多的探索計(jì)算機(jī)這個領(lǐng)域,才能認(rèn)清軟件工程專業(yè),才會有更多的樂趣,才能讓生活不再乏味,因?yàn)槲壹热贿x擇了計(jì)算機(jī),選擇了軟件工程就一定要把它弄明白要不然學(xué)著也就沒有意義了,為了以后現(xiàn)在所做的一切都是必須的,都是基礎(chǔ)是為了更進(jìn)一步所做的鋪墊,我們每個人都必須這么做,因?yàn)檫@在今后可能就是我們生活中最重要的組成部分?!冻绦蛟O(shè)計(jì)實(shí)習(xí)》實(shí)習(xí)報(bào)告圖像簡易處理_圖像模糊化一、題目介紹要求設(shè)計(jì)并實(shí)現(xiàn)一個簡易的圖像處理軟件,能夠從文件讀取并顯示BMP圖像數(shù)據(jù);對圖像進(jìn)行一些常規(guī)的處理,包括圖像的放大/縮小、圖像滾動、彩色轉(zhuǎn)灰度、圖像模糊化;能夠?qū)⑻幚砗蟮膱D像數(shù)據(jù)保存至文件。1.讀取并顯示BMP圖像:通過VC提供的文件打開對話框讓用戶選擇要打開的BMP文件,讀取文件數(shù)據(jù),將BMP圖像顯示到主窗口的客戶區(qū)。首次顯示時保持BMP圖像的原始尺寸。若圖像在寬度或高度上超過窗口客戶區(qū),則需要提供滾動條對圖像進(jìn)行滾動操作。網(wǎng)絡(luò)上存在很多讀取并顯示BMP圖像的源碼,可下載并改造至程序中,也可以使用現(xiàn)成的圖像處理類庫或組件(如著名的CxImage類庫)。2.圖像模糊化:圖像中各個部分(如人的眼睛)通常比較清晰,與周圍其他部分截然不同,此功能是將圖像模糊化,使得整個圖像變得“發(fā)虛”,增加了不同部分過渡的平滑性,但降低了圖像原本的清晰度。圖像模糊化通常采用基于區(qū)域的像素重整策略,也就是說,一個像素的顏色值要根據(jù)它周圍其他像素的顏色值通過一定的算法(如平均或加權(quán)平均)獲得,每個像素經(jīng)過同樣處理之后,其顏色值均由周圍像素混合而成,從而增加了圖像各個部分過渡的平滑性,實(shí)現(xiàn)模糊化。3.保存圖像至文件:通過VC提供的保存文件對話框讓用戶選擇要保存的目錄位置及文件名,將窗口中處理過的圖像保存至BMP文件。軟件界面不做具體的規(guī)定,可自行設(shè)計(jì)。但要本著簡潔使用、操作方便、視覺美觀的原則。二、主要內(nèi)容(詳細(xì)介紹系統(tǒng)總體功能、模塊劃分,以及每個模塊的具體實(shí)現(xiàn))系統(tǒng)的總體功能是實(shí)現(xiàn)圖像的模糊化,主要分為三個模塊:1.讀取并顯示BMP圖像,2.圖像模糊化,3.保存圖像至文件。首先是讀取并顯示BMP圖片:第一步:建立MFC工程文件--新建--MFCAppWizardd(exe)工程--單文檔—確定。第二步:設(shè)置打開函數(shù)查看--建立類導(dǎo)向(Ctrl+W)--CpictureXSView(類名)--ID_FILE_OPEN(IDs列表)--COMMAND(Messages列表)--默認(rèn)成員函數(shù)名為OnFileOpen--MemberFunctions(成員函數(shù))中雙擊該函數(shù)進(jìn)入函數(shù)編輯。建立如下函數(shù):打開圖片、保存圖片為重點(diǎn)。對象標(biāo)識符消息函數(shù)名所屬類ID_FILE_OPENCOMMANDOnFileOpenCpainterViewID_FILE_SAVECOMMANDOnFileSaveCpainterViewID_FILE_NEWUPDATE_COMMAND_UIOnUpdateFileNewCpainterViewID_FILE_MRU_FILE1UPDATE_COMMAND_UIOnUpdateFileMruFile1CpainterView注意:在添加Messages列表中:ON_COMMAND是點(diǎn)了按鈕或菜單項(xiàng)后的響應(yīng)消息;ON_UPDATE_COMMAND_UI是用來表示對應(yīng)的按鈕和菜單項(xiàng)的狀態(tài)的響應(yīng)消息,比如你打開這個菜單時,處理這個菜單的狀態(tài),比如選中、變灰等。UPDATE_COMMAND_UI處理程序的參數(shù)是個「指向CCmdUI對象的指針」,而CCmdUI對象就代表著對應(yīng)的選單命令項(xiàng),因此你只需呼叫CCmdUI所準(zhǔn)備的,專門用來處理命令項(xiàng)外觀的函式(如Enable或SetCheck)即可。第三步:View類添加成員函數(shù)和成員變量//參數(shù)定義

public:

CStringBmpName;

//保存圖像文件文件名

CStringEntName;

//保存圖像文件擴(kuò)展名

CBitmapm_bitmap;

//創(chuàng)建位圖對象

void

ShowBitmap(CDC*pDC,CStringBmpName);

//用來顯示指定位圖bmp的函數(shù)

BOOLShowJpgGif(CDC*

pDC,CStringstrPath,

int

x,

int

y);//用來顯示指定位圖jpg、gif的函數(shù)添加方法:選中ClassView區(qū)--選中View類右鍵--增加成員變量函數(shù)。第四步:為ID_FILE_OPEN消息添加打開函數(shù)//**************文件打開****************//voidCPictureMapView::OnFileOpen(){//四種格式的文件:bmpgifjpgtiff CStringfilter; filter="所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;*.jpg;*.gif;*.tiff|BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|GIF(*.gif)|*.gif|TIFF(*.tiff)|*.tiff||"; CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL); //按下確定按鈕dlg.DoModal()函數(shù)顯示對話框 if(dlg.DoModal()==IDOK) { //獲取路徑文件名擴(kuò)展文件名 BmpName=dlg.GetPathName(); //BmpName.Format(_T("%s",str));//重點(diǎn):錯誤會出現(xiàn)錯誤的路徑 //AfxMessageBox(BmpName);//顯示圖片的路徑:打樁功能 EntName=dlg.GetFileExt(); EntName.MakeLower();//此成員函數(shù)將此CString對象轉(zhuǎn)換為一個小寫字符串 /**********************************************/ /**使用CString處理字符串可處理Unicode、ANSI**/ /**CString中的Format進(jìn)行字符串轉(zhuǎn)換**/ /**********************************************/ Invalidate();//調(diào)用該函數(shù)就會調(diào)用ONDRAW畫圖 }}第五步:新建菜單和最近使用菜單不可用MFCClassWizard(ctrl+W)--CpictureXSView(類名)--ID_FILE_NEW(IDs列表)—UPDATE_COMMAND_UI(Messages列表)—選擇默認(rèn)成員函數(shù)名--MemberFunctions(成員函數(shù))中雙擊該函數(shù)進(jìn)入函數(shù)編輯。添加函數(shù)://************使新建菜單不可用*********//voidCPictViewView::OnUpdateFileNew(CCmdUI*pCmdUI){ //TODO:AddyourcommandupdateUIhandlercodehere pCmdUI->Enable(FALSE);}同理:最近使用菜單//************使“最近的文件”不可用*********//voidCPictViewView::OnUpdateFileMruFile1(CCmdUI*pCmdUI){ //TODO:AddyourcommandupdateUIhandlercodehere pCmdUI->Enable(FALSE);}第六步:編寫顯示bmp格式圖片函數(shù)//***************顯示bmp格式圖片******************//voidCPictureMapView::ShowBitmap(CDC*pDC,CStringBmpName){ //顯示圖片函數(shù)LoadImage HBITMAPm_hBitmap; m_hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); //AfxMessageBox(BmpName); /**************************************************/ /**1.要裝載OEM圖像,則設(shè)此參數(shù)值為0**/ /**OBM_OEM:位圖;OIC_OEM圖標(biāo);OCR_OEM:光標(biāo)**/ /**2.BmpName要裝載圖片的文件名**/ /**3.裝載圖像類型:IMAGE_BITMAP-裝載位圖**/ /**IMAGE_CURSOR-裝載光標(biāo)**/ /**IMAGE_ICON-裝載圖標(biāo)**/ /**4.指定圖標(biāo)或光標(biāo)的寬度和長度以像素為單位**/ /**此參數(shù)為零并且值LR_DEFAULTSIZE沒有被使用那么**/ /**函數(shù)使用目前的資源寬度**/ /**************************************************/ if(m_bitmap.m_hObject) { m_bitmap.Detach();//m_bitmap為創(chuàng)建的位圖對象 } m_bitmap.Attach(m_hBitmap); //邊界 CRectrect; GetClientRect(&rect); //定義并創(chuàng)建一個內(nèi)存設(shè)備環(huán)境 CDCdcBmp; if(!dcBmp.CreateCompatibleDC(pDC))//創(chuàng)建兼容性的DC return; BITMAPm_bmp;//臨時bmp圖片變量 //MessageBox("圖片正在導(dǎo)入!"); m_bitmap.GetBitmap(&m_bmp);//將圖片載入位圖中//MFCafxwin1.inl錯誤GetBitmap中 CBitmap*pbmpOld=NULL; dcBmp.SelectObject(&m_bitmap);//將位圖選入臨時內(nèi)存設(shè)備環(huán)境//圖片顯示調(diào)用函數(shù)BitBlt pDC->BitBlt(0,0,m_bmp.bmWidth,m_bmp.bmHeight,&dcBmp,0,0,SRCCOPY);/******************************************************/ /**參數(shù)x、y位圖目標(biāo)矩形左上角x、y的坐標(biāo)值居中**/ /**nWidth、nHeigth位圖目標(biāo)矩形的邏輯寬度和高度**/ /**pSrcDC表示源設(shè)備CDC指針**/ /**xSrc、ySrc表示位圖源矩形的左上角的x、y邏輯坐標(biāo)值**/ /**dwRop表示顯示位圖的光柵操作方式**/ /**SRCCOPY用于直接將位圖復(fù)制到目標(biāo)環(huán)境中**/ /******************************************************/ dcBmp.SelectObject(pbmpOld);//恢復(fù)臨時DC的位圖 DeleteObject(&m_bitmap);//刪除位圖 dcBmp.DeleteDC();//刪除后臺DC//Invalidate();//一直調(diào)用OnDraw顯示圖片}第六步:實(shí)現(xiàn)圖片顯示voidCPictureMapView::OnDraw(CDC*pDC){ CPictureMapDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere /*在OnDraw函數(shù)中實(shí)現(xiàn)圖片的最后顯示功能*/ if(!pDoc) return;if(EntName.Compare(_T("bmp"))==0)//bmp格式 { ShowBitmap(pDC,BmpName); } elseif(EntName.Compare(_T("jpg"))==0) { ShowJpgGif(pDC,BmpName,1,1); }之后是對圖像進(jìn)行模糊化處理:其中主要是利用了高斯平滑作為數(shù)學(xué)模板對圖像進(jìn)行模糊化處理,以及改變像素的算法,下面是對高斯平滑的簡單說明:圖像的高斯平滑也是利用鄰域平均的思想,對圖像進(jìn)行平滑處理的一種方法。與圖像的簡單平滑不同的是,圖像的高斯平滑中,在對圖像鄰域進(jìn)行平均時,不同位置的像素被賦予了不同的權(quán)值。在圖像的簡單平滑處理中,算法利用卷積模板逐一處理圖像中的每個像素,最終得到處理結(jié)果,這一過程可以形象地比作對源圖像中的像素一一進(jìn)行過濾整理,同時進(jìn)行必要的運(yùn)算,最后產(chǎn)生結(jié)果數(shù)據(jù)。圖像處理中把對像素鄰域逐一處理的算法過程稱為濾波器。平滑線性濾波器的工作原理是利用模板對鄰域內(nèi)像素灰度進(jìn)行加權(quán)平均,因此平滑線性濾波器也被稱為均值濾波器,圖像的簡單平滑就是平滑線性濾波器的一種應(yīng)用。平滑線性濾波器的衰減因子一般選用模板中所有權(quán)值的和,這樣就可避免處理對圖像整體屬性的影響。另外,線性濾波器不僅能用于圖像的平滑,也可以用于圖像的其他增強(qiáng)處理,這些會在后面的章節(jié)為大家介紹。高斯平滑的原理:圖像的高斯平滑是平滑線性濾波器的另一種應(yīng)用,與圖像的簡單平滑不同的是,它在對鄰域內(nèi)像素灰度進(jìn)行平均時,給予了不同位置像素不同的權(quán)值。圖11-8顯示的是3×3鄰域的高斯模板,模板上越是靠近鄰域中心的位置,其權(quán)值就越高。如此安排權(quán)值的意義在于用此模板進(jìn)行圖像平滑時,在對圖像細(xì)節(jié)進(jìn)行模糊的同時,可以更多地保留圖像總體的灰度分布特征。相比圖像的簡單平滑,高斯平滑對高對比度圖像的平滑效率較低,在離散型雜點(diǎn)的消除方面,高斯平滑的效果并不理想。然而如果需要在平滑過程中保留源圖像的總體特征,高斯平滑就具有很大的優(yōu)勢。圖11-9對比了圖像的簡單平滑和高斯平滑的處理差異,圖中a表示一個5×5鄰域內(nèi)的像素灰度,從圖中可以看出此鄰域內(nèi)有兩處灰度較高的亮點(diǎn),b為對a進(jìn)行3×3鄰域簡單平滑的結(jié)果,從b中可以看出,源圖像中的兩處亮點(diǎn)被連接在一起,失去了源圖像的特征,c為對a進(jìn)行3×3鄰域高斯平滑的結(jié)果,可以發(fā)現(xiàn)c中依然保留著源圖像的特征。高斯平滑不僅能進(jìn)行3×3鄰域的圖像平滑處理,也可以對更大范圍的鄰域進(jìn)行平滑,高斯模板上的權(quán)值是由高斯分布函數(shù)確定的,有興趣的讀者可以參考概率論中統(tǒng)計(jì)分布部分的內(nèi)容。高斯平滑的算法實(shí)現(xiàn):考慮圖像為灰度圖,則圖像的簡單平滑算法如下:BYTE**

CreatImage(BYTE*

image,unsigned

int

width,

unsigned

int

height,

int

bt=4);BYTE

GetAsh(BYTE**

imageBuf0,

int

x,int

y);void

SetPixelXY(BYTE**

imageBuf1,

intx,

int

y,

int

a);int

TempltExcuteAsh(BYTE**

imageBuf0,int

w,

int

h,int*

templt,

int

tw,

int

x,

inty);static

void

SmoothGaussAsh(BYTE*image0,BYTE*

image1,unsignint

w,unsigned

inth){//將圖像轉(zhuǎn)化為矩陣形式BYTE**imageBuf0

=

CreatImage(image0,

w,

h);BYTE**imageBuf1

=

CreatImage(image1,

w,

h);//設(shè)定模板Inttemplt[9]={1,2,1,2,4,2,1,2,1};int

x,y;int

a;intscale;//設(shè)定衰減因子scale

=16;//依次對源圖像的每個像素進(jìn)行處理for(y=1;y<h-1;

y++){

for(x=1;

x<w-1;

x++){//利用高斯模板對鄰域進(jìn)行處理

a=TempltExcuteAsh(imageBuf0,w,h,templt,3,x,y);a/=

scale;//過限處里a

=a>255?255:a;

a

=

a<0?0:a;SetPixelXY(imageBuf1,x,y,a);

}}//清理內(nèi)存free(imageBuf0);free(imageBuf1);}可以將圖像的高斯平滑推廣到彩色圖像的處理,實(shí)現(xiàn)如下:BYTE**

CreatImage(BYTE*

image,unsigned

int

width,

unsigned

int

height,

int

bt=4)int

TempltExcuteCl(BYTE**

imageBuf0,int

w,

int

h,int*

templt,

int

tw,

int

x,

int

y,

intcn);static

void

SmoothGaussCl(BYTE*image0,

BYTE*

image1,

unsigned

int

w,unsigned

inth){//將圖像轉(zhuǎn)化為矩陣形式BYTE**imageBuf0

=

CreatImage(image0,

w,

h);BYTE**imageBuf1

=

CreatImage(image1,

w,

h);//設(shè)定模板inttemplt[9]={1,2,1,2,4,2,1,2,1};intx,y,c;int

a;intscale;

//設(shè)定衰減因子

scale

=16;

//依次對源圖像的每個像素進(jìn)行處理

for(y=1;y<h-1;

y++)

for(x=1;

x<w-1;

x++)

for(c=0;

c<3;

c++)

{//利用高斯模板對鄰域進(jìn)行處理a=TempltExcuteCl(imageBuf0,w,h,templt3,,x,y,c);a/=

scale;//過限處理a

=a>255?255:a;

a

=

a<0?0:a;

imageBuf1[y][x*4+c]=a;}

//清理內(nèi)存

free(imageBuf0);

free(imageBuf1);}最后一個模塊是:圖像的保存主要用到了如下代碼:

bool

SaveBitmapToFile(CBitmap*

bitmap,

LPSTR

lpFileName)

{

HBITMAP

hBitmap;

//

為剛才的屏幕位圖句柄

HDC

hDC;

//設(shè)備描述表

int

iBits;

//當(dāng)前顯示分辨率下每個像素所占字節(jié)數(shù)

WORD

wBitCount;

//位圖中每個像素所占字節(jié)數(shù)

DWORD

dwPaletteSize

=

0,

//定義調(diào)色板大小

dwBmBitsSize,

//位圖中像素字節(jié)大小

dwDIBSize,

//位圖文件大小

dwWritten;

//寫入文件字節(jié)數(shù)

BITMAP

Bitmap;

//位圖屬性結(jié)構(gòu)

BITMAPFILEHEADER

bmfHdr;

//位圖文件頭結(jié)構(gòu)

BITMAPINFOHEADER

bi;

//位圖信息頭結(jié)構(gòu)

LPBITMAPINFOHEADER

lpbi;

//指向位圖信息頭結(jié)構(gòu)

HANDLE

fh,

//定義文件

hDib,

//分配內(nèi)存句柄

hPal,

//調(diào)色板句柄

hOldPal

=

NULL;

//計(jì)算位圖文件每個像素所占字節(jié)數(shù)

hBitmap

=

(HBITMAP)*bitmap;

hDC

=

CreateDC("DISPLAY",NULL,NULL,NULL);iBits=GetDeviceCaps(hDC,BITSPIXEL)*GetDeviceCaps(hDC,

PLANES);

DeleteDC(hDC);

if

(iBits

<=

1)

wBitCount

=

1;

else

if

(iBits

<=

4)

wBitCount

=

4;

else

if

(iBits

<=

8)

wBitCount

=

8;

else

if

(iBits

<=

24)

wBitCount

=

24;

else

if

(iBits

<=

32)

wBitCount

=

32;

//計(jì)算調(diào)色板大小

if

(wBitCount

<=

8)

dwPaletteSize

=

(1

<<

wBitCount)

*

sizeof

(RGBQUAD);

//設(shè)置位圖信息頭結(jié)構(gòu)

GetObject(hBitmap,

sizeof

(BITMAP),

(LPSTR)&Bitmap);

bi.biSize

=

sizeof

(BITMAPINFOHEADER);

bi.biWidth

=

Bitmap.bmWidth;bi.biHeight

=

Bitmap.bmHeight;

bi.biPlanes

=

1;

bi.biBitCount

=

wBitCount;bi.biCompression

=

BI_RGB;bi.biSizeImage

=

0;bi.biXPelsPerMeter

=

0;

bi.biYPelsPerMeter

=

0;

bi.biClrUsed

=

0;

bi.biClrImportant

=

0;

dwBmBitsSize

=

((Bitmap.bmWidth

*

wBitCount+31)

/

32)

*

4

*

Bitmap.bmHeight;

//為位圖內(nèi)容分配內(nèi)存

hDib

=

GlobalAlloc(GHND,

dwBmBitsSize

+

dwPaletteSize

+

sizeof

(BITMAPINFOHEADER));

lpbi

=

(LPBITMAPINFOHEADER)GlobalLock(hDib);

*lpbi

=

bi;

//

處理調(diào)色板

hPal

=

GetStockObject(DEFAULT_PALETTE);

if

(hPal)

{

hDC

=

::GetDC(NULL);

hOldPal

=

::SelectPalette(hDC,

(HPALETTE)hPal,

FALSE);

RealizePalette(hDC);

}

//

獲取該調(diào)色板下新的像素值

GetDIBits(hDC,

hBitmap,

0,

(UINT)

Bitmap.bmHeight,

(LPSTR)lpbi

+

sizeof

(BITMAPINFOHEADER)

+

dwPaletteSize,(LPBITMAPINFO)lpbi,

DIB_RGB_COLORS);

//恢復(fù)調(diào)色板

if

(hOldPal)

{

SelectPalette(hDC,

(HPALETTE)hOldPal,

TRUE);

RealizePalette(hDC);

::ReleaseDC(NULL,

hDC);

}

//創(chuàng)建位圖文件

fh

=

CreateFile(lpFileName,GENERIC_WRITE,0,

NULL,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL

|

FILE_FLAG_SEQUENTIAL_SCAN,

NULL);

if

(fh

==

INVALID_HANDLE_VALUE)

return

FALSE;

//

設(shè)置位圖文件頭

bmfHdr.bfType

=

0x4D42;

//

"BMP"

dwDIBSize

=

sizeof

(BITMAPFILEHEADER)+

sizeof

(BITMAPINFOHEADER)

+

dwPaletteSize

+

dwBmBitsSize;

bmfHdr.bfSize

=

dwDIBSize;

bmfHdr.bfReserved1

=

0;

bmfHdr.bfReserved2

=

0;

bmfHdr.bfOffBits

=

(DWORD)sizeof

(BITMAPFILEHEADER)+

(DWORD)sizeof

(BITMAPINFOHEADER)+

dwPaletteSize;WriteFile(fh,

(LPSTR)&bmfHdr,

sizeof(BITMAPFILEHEADER),

&dwWritten,

NULL);WriteFile(fh,

(LPSTR)lpbi,

dwDIBSize,&dwWritten,

NULL);

GlobalUnlock(hDib);

GlobalFree(hDib);

CloseHandle(fh);

return

TRUE;

}其中在保存文件的操作中引用了DIB函數(shù)庫中的函數(shù),對圖像進(jìn)行了大小顏色所占字節(jié)數(shù)進(jìn)行了計(jì)算三、技術(shù)總結(jié)(包括:使用的主要技術(shù)、遇到的技術(shù)問題及解決方法總結(jié)、關(guān)鍵代碼)圖像模糊化的實(shí)現(xiàn)主要應(yīng)用了高斯平滑技術(shù)來不斷改變像素,使用改變像素的算法,還應(yīng)用到了DIB函數(shù)庫,主要是對圖片的讀入和計(jì)算圖像的大小和顏色,這之中有關(guān)的代碼都已在上步中列舉了出來,在實(shí)習(xí)過程中遇到了許多問題,但是我大部分都通過網(wǎng)絡(luò)搜索四、心得體會如今一個星期的程序設(shè)計(jì)實(shí)習(xí)已經(jīng)結(jié)束了,從這次實(shí)習(xí)的成果上來看,還是比較成功的。辛勤的工作換來的是累累的碩果,不論是學(xué)校,還是我們自己。

首先我們幾個人在較短的時間內(nèi),克服各種困難,從最初的閱讀文檔,設(shè)計(jì)、開發(fā),到最后的調(diào)試,完善,我們都按質(zhì)按量的完成了,完成預(yù)定的工程開發(fā)任務(wù),通過了老師的驗(yàn)收,也得到了他的肯定,實(shí)現(xiàn)了最初為的目標(biāo)。

再有的一點(diǎn)就是,通過這次活動,讓我們理論聯(lián)系實(shí)際,在軟件工程的開發(fā)過程、數(shù)據(jù)庫的開發(fā)、分布式計(jì)算等工程實(shí)踐經(jīng)驗(yàn)上有了很大的提高。在實(shí)習(xí)中也培養(yǎng)了初步的大型項(xiàng)目合作開發(fā)經(jīng)驗(yàn),這一些都很好的增強(qiáng)了我們的個人的能力和并提高了自身的素質(zhì)。遇到問題先自己思考,無從下手再找高手幫忙看看,注意他幫你看的思路,別在一旁閑著,看多了自己也會了,不然你一輩子都停留在那種水平,從人身上學(xué)到的東西遠(yuǎn)遠(yuǎn)比書多的多.解決了一個問題后,要去究根問底去找到問題產(chǎn)生的起因,以防你下次遇到類似的問題再浪費(fèi)同樣的時間.把代碼寫的漂亮,注釋,空行,規(guī)范一樣不能少,可讀性是放在第一位.曾經(jīng)看過一個高手寫的代碼,真的一看就是不同水平的人寫的,幾乎很完美,讀起來很流暢,方便自己也方便別人.任務(wù)完后不要呆著,去要求經(jīng)理給你更有挑戰(zhàn)性的任務(wù)。類似的以上的收獲還有很多很多,但在活動結(jié)束的這個時候,仔細(xì)考慮一下,還是有一些地經(jīng)驗(yàn)教訓(xùn)的。

例如在活動中我們能感覺得到,很多的工作經(jīng)驗(yàn),開發(fā)的知識我們了解的還是不夠充分,致使我們在開發(fā)初期要發(fā)費(fèi)較多的時間用于入門。但有一點(diǎn)感覺就是,我們在學(xué)校所學(xué)的一些基本知識還是比較有用的,例如程序設(shè)計(jì)語言C++和C,數(shù)據(jù)庫基本原理等,正是這些基礎(chǔ)知識使我們在缺少工程經(jīng)驗(yàn)的情況下還能盡快入手,后來趕上。

針對我們學(xué)校部分學(xué)生普遍基礎(chǔ)理論知識較多,工程經(jīng)驗(yàn)不足的現(xiàn)象,我們同學(xué)大可以去掉以往羞于參與工程,怕在別人前認(rèn)短的心態(tài),而為了更好的進(jìn)行開發(fā),我們也應(yīng)該在校期間就多進(jìn)行一些工程方面的鍛煉,培養(yǎng)實(shí)際動手能力。

我想象這樣一此讓同學(xué)接觸社會,培養(yǎng)實(shí)際動手能力的活動真的很不錯,也是同學(xué)們所歡迎的,當(dāng)然把這樣的活動辦好需要學(xué)校的老師和同學(xué)們共同努力。也希望,這樣的活動能不斷地繼續(xù)下去,并發(fā)展壯大。

雖就短短的一個星期,但我想這一份經(jīng)歷必將會為我們將來進(jìn)入社會打下一個良好的基礎(chǔ),不管是在以后的就業(yè)指導(dǎo)上、還是在工作生活為人上,我們都擁有了一筆寶貴的財(cái)富。

在最后我想感謝為我們提供這次程序設(shè)計(jì)實(shí)習(xí)機(jī)會、還有在此過程中熱心幫助我們的學(xué)校老師,尤其是我們計(jì)算機(jī)與通信工程學(xué)院的老師,謝謝!

《程序設(shè)計(jì)綜合實(shí)習(xí)》總結(jié)報(bào)告設(shè)計(jì)題目:手機(jī)資費(fèi)系統(tǒng)班級:____20XX級計(jì)算機(jī)一班_____學(xué)號:______報(bào)告人姓名:_______指導(dǎo)教師:________實(shí)驗(yàn)地點(diǎn):___山東農(nóng)業(yè)大學(xué)北校區(qū)計(jì)算機(jī)實(shí)驗(yàn)室_____完成起止日期:________20XX.8.31-20XX.9.6_________目錄《程序設(shè)計(jì)綜合實(shí)習(xí)》總結(jié)報(bào)告 1一、設(shè)計(jì)思路 3二:部分代碼實(shí)現(xiàn): 5主界面 5用戶、管理員登陸界面 5用戶主界面 6管理員主界面 7用戶數(shù)據(jù)類 8套餐數(shù)據(jù)類 8賬號、密碼登陸的實(shí)現(xiàn) 9用戶信息的輸入 11套餐使用情況的實(shí)現(xiàn) 11業(yè)務(wù)模擬 12三:調(diào)試界面具體表現(xiàn) 15主界面: 15用戶界面: 15管理員界面: 15查看個人信息界面: 16套餐使用情況: 16輸入用戶信息: 17查看個人所選套餐信息: 17設(shè)置套餐: 18充值界面: 18增加多個套餐: 19四:設(shè)計(jì)體會與小結(jié) 20TOC\o"1-1"\h\z\u一、設(shè)計(jì)思路手機(jī)資費(fèi)系統(tǒng)通過類將系統(tǒng)分成五個類,三個數(shù)據(jù)類:用戶信息,套餐信息,用戶和管理員的賬號、密碼;兩個操作類:用戶的操作類,管理員的操作類。在操作類內(nèi)的構(gòu)造和析構(gòu)函數(shù)內(nèi)編寫文件的讀取和儲存。實(shí)現(xiàn)了程序一運(yùn)行就將所有內(nèi)容存入向量組中,在操作完之后再將全部內(nèi)容重新導(dǎo)出,儲存于文件。具體功能:用戶: 查看個人信息、余額 修改密碼 查看個人所選套餐基本信息 查看套餐使用情況 業(yè)務(wù)模擬 費(fèi)用詳單管理員:輸入用戶基本信息 刪除用戶信息 查看用戶基本信息 修改用戶基本信息 制定套餐信息 刪除套餐信息查詢套餐信息修改套餐信息 充值二:部分代碼實(shí)現(xiàn):主界面cout<<"╔════════歡迎進(jìn)入手機(jī)資費(fèi)系統(tǒng)═══════╗"<<endl;cout<<"║※1:用戶通道※║"<<endl;cout<<"║※2:管理員通道※║"<<endl;cout<<"║※…………※║"<<endl;cout<<"║※9:結(jié)束程序※║"<<endl;cout<<"╚═════════════════════════╝"<<endl;用戶、管理員登陸界面 cin>>choice;switch(choice){case1:{stringtem_pho,tem_pas;ints=0;cout<<"請輸入賬號(手機(jī)號):"<<endl;cin>>tem_pho;cout<<"請輸入密碼:"<<endl;cin>>tem_pas;for(f.uai=f.ua.begin();f.uai!=f.ua.end();++f.uai){if(f.uai->id==tem_pho&&f.uai->password==tem_pas){s=1;f.user_login_success(tem_pho,tem_pas);break;}}if(s==0){cout<<"此賬號(手機(jī)號)尚未注冊,請聯(lián)系客服或管理員"<<endl;system("pause");}break;}case2:{stringtem_pho,tem_pas;ints=0;cout<<"請輸入賬號:"<<endl;cin>>tem_pho;cout<<"請輸入密碼:"<<endl;cin>>tem_pas;for(f.mai=f.ma.begin();f.mai!=f.ma.end();++f.mai){if(f.mai->id==tem_pho&&f.mai->password==tem_pas){s=1;f.manager_login_success(tem_pho,tem_pas);break;}}if(s==0){cout<<"此賬號尚未注冊,請聯(lián)系管理員"<<endl;system("pause");}break;}用戶主界面while(1){system("cls");cout<<"進(jìn)入成功!"<<endl;cout<<"1.查看個人信息、余額"<<endl;cout<<"2.修改密碼"<<endl;cout<<"3.查看個人所選套餐基本信息"<<endl;cout<<"4.查看套餐使用情況"<<endl;cout<<"5.業(yè)務(wù)模擬"<<endl;cout<<"6.費(fèi)用詳單"<<endl;cout<<"0.返回"<<endl;intchoice;cin>>choice;switch(choice){case1:{e.exhi_self_info(id);break;}case2:{f.change_user_account(id,pass);break;}case3:{x.exhi_user_selfs(id);break;}case4:{e.extra_tp(id);break;}case5:{e.service_imitate(id);break;}case6:{break;}case0:return;}system("pause");}管理員主界面while(1){system("cls");cout<<"進(jìn)入成功!"<<endl;cout<<"1.輸入用戶基本信息"<<endl;cout<<"2.刪除用戶信息"<<endl;cout<<"3.查看用戶基本信息"<<endl;cout<<"4.修改用戶基本信息"<<endl;cout<<"5.制定套餐信息"<<endl;cout<<"6.刪除套餐信息"<<endl;cout<<"7.查詢套餐信息"<<endl;cout<<"8.修改套餐信息"<<endl;cout<<"9.充值"<<endl;cout<<"0.返回"<<endl;intchoice;cin>>choice;switch(choice){case1:{e.add_user_info();break;}case2:{e.delete_user_info();break;}case3:{e.exhi_info();break;}case4:{e.chan_user_info();break;}case5:{x.add_tariff_packages();break;}case6:{x.delete_tariff_packages();break;}case7:{x.exhi_tariff_packages();break;}case8:{x.chan_tariff_packages();break;}case9:{break;}case0:return;}system("pause");}用戶數(shù)據(jù)類classuser{public:stringname;//姓名stringphone_num;//手機(jī)號inttariff_packge_id;//套餐代碼doubleremain_sum;//余額intcall_time=0;//本月用掉的通話時間(分鐘)doubledata_usage=0;//本月用掉的流量(M)friendistream&operator>>(istream&is,user&c);friendostream&operator<<(ostream&os,constuser&c);};istream&operator>>(istream&is,user&c){is>>>>c.phone_num>>c.tariff_packge_id>>c.remain_sum;returnis;}套餐數(shù)據(jù)類classtariff_packages{public:intid;//套餐代碼stringname;//套餐名doublecost;//每月花費(fèi)intttime;//套餐內(nèi)每月所包含的通話時間(分鐘)doubletdata;//套餐內(nèi)每月所包含的流量(M)doublecost_time;//超出套餐外的通話價格(元/分鐘)doublecost_data;//超出套餐外的流量價格(元/M)friendistream&operator>>(istream&is,tariff_packages&c);friendostream&operator<<(ostream&os,consttariff_packages&c);};istream&operator>>(istream&is,tariff_packages&c){is>>c.id>>>>c.cost>>c.ttime>>c.tdata>>c.cost_time>>c.cost_data;returnis;}ostream&operator<<(ostream&os,consttariff_packages&c){os<<"套餐代碼:"<<c.id<<"套餐名:"<<<<"每月花費(fèi):"<<c.cost<<endl;os<<"套餐內(nèi)每月所包含的通話時間(分鐘):"<<c.ttime<<"套餐內(nèi)每月所包含的流量(M):"<<c.tdata<<endl;os<<"超出套餐外的通話價格(元/分鐘):"<<c.cost_time<<"超出套餐外的流量價格(元/M):"<<c.cost_data<<endl;returnos;}賬號、密碼登陸的實(shí)現(xiàn)classmaneger_account{public:stringid;stringpassword;};classaccount_oper{public:vector<user_account>ua;vector<user_account>::iteratoruai;vector<maneger_account>ma;vector<maneger_account>::iteratormai;account_oper();~account_oper();voidadd_account();voidchange_user_account(stringid,stringpass);voiddelete_account();voiduser_login_success(stringid,stringpass);voidmanager_login_success(stringid,stringpass);}f,z;account_oper::account_oper(){ifstreaminfile("yonghu_zhanghu.txt",ios::in);user_accounttemp;while(infile>>temp.id>>temp.password)ua.push_back(temp);infile.close();ifstreaminfile2("guanli_zhanghu.txt",ios::in);maneger_accounttemp2;while(infile2>>temp2.id>>temp2.password)ma.push_back(temp2);infile2.close();}account_oper::~account_oper(){ofstreamoutfile("yonghu_zhanghu.txt",ios::out);for(uai=ua.begin();uai!=ua.end();++uai)outfile<<uai->id<<''<<uai->password<<endl;outfile.close();ofstreamoutfile2("guanli_zhanghu.txt",ios::out);for(mai=ma.begin();mai!=ma.end();++mai)outfile2<<mai->id<<''<<mai->password<<endl;outfile2.close();}voidaccount_oper::change_user_account(stringid,stringpass){cout<<"您正在為手機(jī)號為:"<<id<<"修改密碼"<<endl;//待修改cout<<"請輸入原密碼:"<<endl;stringold_pass,new_pass;cin>>old_pass;if(old_pass==pass){cout<<"請輸入新密碼:"<<endl;cin>>new_pass;user_accounttemp_account;temp_account.id=id;temp_account.password=new_pass;for(f.uai=f.ua.begin();f.uai!=f.ua.end();++f.uai){if(f.uai->id==id&&f.uai->password==pass){f.ua.erase(f.uai);f.ua.push_back(temp_account);}}}elsecout<<"密碼錯誤!"<<endl;system("pause");}用戶信息的輸入voiduser_manage::add_user_info(){cout<<"1:增加單個用戶信息2:增加多個用戶信息"<<endl;intchoice;cin>>choice;switch(choice){case1:{cout<<"請依次輸入姓名、手機(jī)號、套餐代碼、初始余額,并將它們用空格分開"<<endl;usertemp;cin>>temp;e.uifo.push_back(temp);break;}case2:{cout<<"請依次輸入姓名、手機(jī)號、套餐代碼、初始余額,并將它們用空格分開,全部輸入0時結(jié)束輸入"<<endl;usertemp;while(cin>>temp){if(=="0")break;e.uifo.push_back(temp);}}}}套餐使用情況的實(shí)現(xiàn)voiduser_manage::extra_tp(stringid){inttemp;intcosttime,alltime,extratime;doublecostdata,alldata,extradata;temp=e.get_tp_id(id);for(e.uifoi=e.uifo.begin();e.uifoi!=e.uifo.end();++e.uifoi){if(e.uifoi->phone_num==id){costtime=e.uifoi->call_time;costdata=e.uifoi->data_usage;}}for(x.tpi=x.tp.begin();x.tpi!=x.tp.end();++x.tpi){if(x.tpi->id==temp){alltime=x.tpi->ttime;alldata=x.tpi->tdata;extratime=alltime-costtime;extradata=alldata-costdata;cout<<"套餐內(nèi)剩余通話時間(分鐘):"<<extratime<<endl;cout<<"套餐內(nèi)剩余上網(wǎng)流量(M):"<<extradata<<endl;break;}}}業(yè)務(wù)模擬voiduser_manage::service_imitate(stringid){co

溫馨提示

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

最新文檔

評論

0/150

提交評論