資源描述:
《VC6.0下bmp位圖的讀取與顯示》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、一.實(shí)驗(yàn)?zāi)康模毫私鈹?shù)字圖像的存儲(chǔ)格式,熟練運(yùn)用某種編程工具語言提供的圖象操作方法。二.實(shí)驗(yàn)內(nèi)容:1.認(rèn)識(shí)數(shù)字圖象2.在VC6.0環(huán)境下,生成MFC應(yīng)用程序框架。3.在已生成的應(yīng)用程序中,加BMP位圖讀取與顯示的代碼,從已有文件中讀取bmp格式文件并在視圖中顯示。三.實(shí)驗(yàn)原理及步驟:(一)基本知識(shí):BMP位圖文件格式BMP位圖文件中主要由4部分內(nèi)容組成:1、文件頭BITMAPFILEHEADER為一STRUCTURE:typedefstructtagBITMAPFILEHEADER{WORDbfType;//文件類型,必須為“BM”或0x424dDWO
2、RDbfSize;//文件大小WORDbfReserved1;//保留WORDbfReserved2;//保留DWORDbfOffBits;//從文件頭到實(shí)際位圖數(shù)據(jù)的偏移字節(jié)數(shù)}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;2、位圖信息頭BITMAPINFOHEADER,定義如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//structuresizeLONGbiWidth;//imagewidthLONGbiHeight;//i
3、mageheightWORDbiPlanes;//valueis1WORDbiBitCount;//colorbitsDWORDbiCompression;//compressionornotDWORDbiSizeImage;//Imagesize=width*height(其中width必須為4的倍數(shù)。LONGbiXPelsPerMeter;//LONGbiYPelsPerMeter;DWORDbiClrUsed;//DWORDbiClrImportant;}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,*PBIT
4、MAPINFOHEADER;1、調(diào)色板typedefstructtagRGBQUAD{BYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;}RGBQUAD;用于存放圖像的顏色。1、圖像的實(shí)際數(shù)據(jù)。對(duì)于2色圖,用1位表示像素的值。對(duì)于16色圖,用4位表示像素的值。對(duì)于256色圖,一個(gè)字節(jié)剛好表示1個(gè)像素。對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色板中索引值,對(duì)于真彩色,不用調(diào)色板,三個(gè)字節(jié)的數(shù)據(jù)分別代表圖像的B、G、R。(二)實(shí)驗(yàn)過程:1、打開VC++界面,工程中選擇MFCAppWizard(
5、exe),并在projectname輸入dip,選擇存放project的位置。2、選擇ok,進(jìn)入下一步。選擇singledocument,并在最后CdipView類的基類中選擇CscrollView,使應(yīng)用程序視圖具有滾動(dòng)條。3、在生成的工程中選擇CdipView,對(duì)class視圖進(jìn)行操作,添加成員變量跟成員函數(shù)到相應(yīng)現(xiàn)在的dipview下intm_x;HBITMAPm_Bmp;LPVOIDm_ColorList;LPBYTEm_Image;LPBITMAPINFOHEADERm_DibHead;enumallocate{None,crtalloca
6、te,heapallocate};allocatem_nBmpallocate;allocatem_nImageallocate;DWORDm_ImageSize;intm_nPalette;HANDLEm_hFile;HANDLEm_hMap;LPVOIDm_lpvFile;HPALETTEm_hPalette;HGLOBALm_hGlob;利用ClassWizard向CdipView類中加入如下成員函數(shù)。voidSetPaletteSize(intnBitCount);//設(shè)置調(diào)色板大小voidClear();//清除BOOLReadFile(C
7、File*pFile);//讀取數(shù)據(jù)到內(nèi)存BOOLSetPalette();//當(dāng)前位圖顏色數(shù)大于256設(shè)置調(diào)色板BOOLGetPalette();//創(chuàng)建顏色數(shù)不大于256的調(diào)色板BOOLDibToDC(CDC*pDC,CSizesize);顯示位圖BOOLMemToDib(LPVOIDlmem);//得到內(nèi)存中位圖象素位置CSizeGetDibSize();//返回位圖尺寸1、設(shè)計(jì)一個(gè)名為IDB_BITMAP1的位圖在resourc下單擊右鍵,選擇插入,單擊Bitmap,選擇新建,然后自己新建一個(gè)位圖,保存。2、修改OnDraw和OnInitia
8、lUpdate()函數(shù)設(shè)置滾動(dòng)條的初始化圖形和現(xiàn)實(shí)圖像。1、打開Menu資源,雙擊主菜單,打開菜單資源編輯器