計算機軟件及應用數字圖像處理VC++編程實現課件_第1頁
計算機軟件及應用數字圖像處理VC++編程實現課件_第2頁
計算機軟件及應用數字圖像處理VC++編程實現課件_第3頁
計算機軟件及應用數字圖像處理VC++編程實現課件_第4頁
計算機軟件及應用數字圖像處理VC++編程實現課件_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數字圖像處理VC++編程實現安秋南京農業(yè)大學工學院數字圖像處理VC++編程實現安秋南京農業(yè)大學工學院1編程實現方法VisualC++圖像處理編程MATLAB圖像處理編程基于開源庫OpenCV的圖像處理編程基于其他庫的圖像處理編程編程實現方法VisualC++圖像處理編程2圖像處理的VC++編程VC++編程環(huán)境簡介圖像編程基礎圖像格式的理解BMP文件格式及讀寫程序范例圖像處理的VC++編程VC++編程環(huán)境簡介3 微型圖像處理系統(tǒng)既包含硬件設備,也需要一定的軟件環(huán)境支持。目前,圖像處理系統(tǒng)平臺多為MicrosoftWindows或X-Windows,開發(fā)的主流工具為Microsoft公司的VC++。這是因為VC++是一種具有高度綜合性能的軟件開發(fā)工具,用它開發(fā)出來的程序有著運行速度快、可移植能力強等優(yōu)點。本書中實例也是在Windows平臺下,用VC++6.0實現的。此外,各國的科學家和研究機構開發(fā)了不少專用的圖像處理軟件環(huán)境,下面僅對主要的幾種作一簡單介紹。 微型圖像處理系統(tǒng)既包含硬件設備,也需要一定的軟件環(huán)境支持。4VC開發(fā)環(huán)境簡介VC編程需要的知識

C/C++語言;

對Windows操作系統(tǒng)的了解(底層編程);

微軟類庫MFC(MicrosoftFoundationClass)VisualC++是一個可視化集成開發(fā)環(huán)境掌握‘工程’的概念菜單使用介紹、Debug/Release區(qū)別等等VC開發(fā)環(huán)境簡介VC編程需要的知識

C/C++語言;

對Wi5VC開發(fā)的兩種方式(一)SDK(softwaredevelopmentkit)方式

又稱WIN32API(應用程序接口)編程

即直接調用32位Windows(WIN32)操作系統(tǒng)提供的接口函數進行編程。SDK編程(VC中)使用的語言是C語言。適合底層編程和對速度要求較高的環(huán)境,比如游戲開發(fā)、驅動開發(fā)、數字圖形等看圖像打開、高斯噪聲繪制的例子VC開發(fā)的兩種方式(一)SDK(softwaredevel6VC開發(fā)的兩種方式(二)MFC方式

又稱類庫編程,即程序主要不再直接跟操作系統(tǒng)API打交道(在需要的時候也可以調用API),而是使用封裝好的C++類庫。MFC編程的好處之一:可以使用MFC向導來生成程序框架,提高效率在這堂課中后面講的程序都是MFC程序VC開發(fā)的兩種方式(二)MFC方式

又稱類庫編程,即程序主要7C++語言是一種中級語言自然語言(高級語言)中級語言低級語言(機器語言)跳過去intm_nA=10;Intm_nB=10;Intm_nC=m_nB+m_nA;MOVAL,10MOVBL,10ADDAL,BLC++語言是一種中級語言自然語言中級語言低級語言跳過去int8C++語言的優(yōu)缺點優(yōu)點:編譯語言脫離語言環(huán)境運行速度快代碼少缺點:編譯過程復雜語言可讀性差容易犯錯糾錯困難C++語言的優(yōu)缺點優(yōu)點:編譯語言缺點:編譯過程復雜9C++語言是C語言的一個超集C語言C++語言VisualC++MFCC++語言是C語言的一個超集C語言C++語言VisualC+10C++是一種面向對象的程序語言CWinApp:程序對象CMainFrame:窗口對象Cdocument:文檔對象Cview:視對象C++是一種面向對象的程序語言CWinApp:程序對象CMa11類的使用CWinApp:程序對象CMainFrame:窗口對象CDocument:文檔對象CView:視對象每一個對象的定義就是一個類,類是C++新派生的一個數據類型,比較抽象。通常情況下可以簡單理解為分類。使用:

CMainFramem_Frame;//創(chuàng)建一個類的實例,分配相應的內存。m_Frame.Create(NULL);//通過實例調用類中的變量、函數、行為等等。類的使用CWinApp:程序對象CMainFrame:窗口對12MFC類庫簡介MFC:微軟開發(fā)的C++程序的類庫,在類庫內集成了Windows程序設計所經常使用到的類,如:窗口的管理、控件的管理、文件的管理、視的管理等。同時對類進行了樹狀的管理,通過封裝和繼承實現了簡單實用的目的,而且功能強大,在Windows環(huán)境下編程和使用VC++編程應該對MFC了解。MFC類庫簡介MFC:微軟開發(fā)的C++程序的類庫,在類庫內集13指針及其使用指針是C語言中一個非常重要的數據類型,通過指針可以實現直接對內存的存取。指針的聲明:int*m_nNum;指針的賦值:m_nNum=&m_ngg;

m_nNum(0002h)*m_nNum(20h)(32)數組的使用:m_nNum=m_nArr[0];

*(m_nNum+3)==m_nArr[4];聲明變量:intm_ngg=32;intm_nArr[100];

20h00h43h1eh0000h0001h0002h1234h1235hFffeeh指針及其使用指針是C語言中一個非常重要的數據類型,指針的聲明14堆和棧的概念堆和棧是計算機管理內存的兩種方式:??臻g一般存儲臨時數據。堆空間一般存儲較大的和生命期較長的數據。C語言中,單個的臨時變量都放在棧中。intm_nNum=32;charm_cChar=‘m’;大型的數組變量放在堆中:intm_nNum[100];BYTE*m_nNum=(BYTE*)newBYTE[2000];堆和棧的概念堆和棧是計算機管理內存的兩種方式:??臻g一般存儲15new和delete操作符new操作符是C++的保留字,用來在堆中開辟一個指定大小的內存空間。BYTE*m_nData=(BYTE*)newBYTE[m_nWidth*m_nHeight];??臻g中的數據在函數調用結束,如果沒有聲明為全局變量,將被自動刪除。堆空間的變量不會自動刪除,需要程序員手工刪除。delete[]m_nData;new和delete操作符new操作符是C++的保留字,用16VC++6.0工作平臺VC++6.0工作平臺17IDE的使用菜單工具條提示欄視窗口編輯窗口輸出窗口IDE的使用菜單18窗口的概念圖示中是我們講要講到的程序的界面,它是Windows系統(tǒng)的一個標準的界面,這種窗口框架結構也是視窗系統(tǒng)的核心。1、系統(tǒng)菜單2、程序菜單3、工具條4、視空間5、提示條窗口的概念圖示中是我們講要講到的程序的界面,它是Window19文檔/視圖的概念文檔/視圖結構是Windows窗口結構中的標準形式。在單文檔窗口程序中,生成一個單文檔模板和窗口視圖對應,這時視圖是由窗口生成的。在多文檔界面中,窗口類只生成主框架,而子窗口和子視圖有文檔模板生成。文檔/視圖的概念文檔/視圖結構是Windows窗口結構中的標20視的概念視結構是窗口中的客戶區(qū),用戶可以在視區(qū)中畫文字、畫圖像等等任意的屏幕的寫操作。WindowsGUI對視結構做了優(yōu)化,用戶可以方便的調用MFC類庫中的相關類完成復雜的任務。視的概念視結構是窗口中的客戶區(qū),用戶可以在視區(qū)中畫文字、畫圖21開始程序設計1、聲明一個文件操作類:CFileRW2、在文件類內完成對BMP文件的讀寫操作。3、在CDoc類中調用CFileRW類的實例完成運算工作,同時在Doc中響應菜單的消息命令。4、在CFileRW中創(chuàng)建存放文件數據的堆變量數組,并以指針的形式完成調用。5、在Doc中實現對堆數組的用后刪除。開始程序設計1、聲明一個文件操作類:CFileRW22計算機軟件及應用]數字圖像處理VC++編程實現課件23圖像在計算機中的理解這是一張計算機桌面的圖像:0,01024,7681024,00,768XY基本元素:圖像空間的大小:1024*768個像素。每個點的坐標(x,y)。顏色分辨率:32位彩色圖像。00000000000000000000000011111111RBGA像素圖像在計算機中的理解這是一張計算機桌面的圖像:0,0102424三基色三基色25調色板在Windows操作系統(tǒng)內部默認存在著一個調色板,調色板的顏色是和顯示卡的顏色能力相對應的,當前的真彩色卡支持3-4個字節(jié)一個點的彩色表,一般第四個字節(jié)用于透明顯示通道。調色板中用8位的一個字節(jié)表示一種顏色分量,R或者G、B。所有的可能的顏色的組合為2^24。這也是VGA顯示卡能夠顯示的最多的顏色數。所以我們把具有24位顏色的圖像,叫做真彩色圖像。調色板在Windows操作系統(tǒng)內部默認存在著一個調色板,調色26分辨率的概念圖像的分辨率越高,圖像的空間點陣數越多;圖像的顏色分辨率越高,表示每個像素點的字節(jié)數越多;圖像的存儲空間大?。ㄗ止?jié)):空間點陣數*每個像素點的顏色字節(jié)數。分辨率的概念圖像的分辨率越高,圖像的空間點陣數越多;27圖像的矩陣格式00000000000000011111111101010101000101010000000100000001000000011110000100000001000000010000000101100101001110010001011100000001圖像在二進制格式中的形式1位表示一個點,兩種顏色組合,黑白圖像。4位表示一個點,16種顏色組合,16種顏色索引圖像8位表示一個點,256種顏色組合,256種顏色索引圖像。16位,24位,32位。0,01024PIXELS768PIXELS圖像實際的存儲空間大?。?024*768*24/8=2304K=2.25M(字節(jié))圖像的矩陣格式0000000000000001111111128圖像的大小有一個長寬各為200個象素,顏色數為16色的彩色圖,每一個象素都用R,G,B三個分量表示,因為每個分量有256個級別,要用8位即一個字節(jié)來表示,所以每個象素需要用3個字節(jié)。整個圖象要用200*200*3,約120k字節(jié)。這幅圖中最多只有16種顏色,我們可以用一個表:表中的每一行記錄一種顏色的R,G,B值。這樣當我們表示一個象素的顏色時,只需要指出該顏色是在第幾行,即該顏色在表中的索引值。舉個例子,如果表的第0行為255,0,0(紅色),那么當某個象素為紅色時,只需要標明0即可。再來計算一下:16種狀態(tài)可以用4位表示,所以一個象素要用半個字節(jié)。整個圖象要用200*200*0.5,約20k字節(jié),再加上表占用的字節(jié)為3*16=48字節(jié)。整個占用的字節(jié)數約為前面的1/6!圖像的大小有一個長寬各為200個象素,顏色數為16色的彩色圖29圖像文件中對上述特征的處理圖像的永久保存是存儲到圖像文件中。由于圖像具有各種不同的特征,所以在存儲文件時應該予以細致的描述:圖像大小、顏色分辨率的大小、是否壓縮、是否自己定義調色板等等。這些信息都包含在圖像文件的文件頭中。圖像文件中對上述特征的處理圖像的永久保存是存儲到圖像文件中。30圖像文件的格式類型標準的圖像文件格式:圖像文件頭+圖像的點陣數據。常用的圖像文件格式:BMP\GIF\JPG\PCX等等。圖像文件的格式類型標準的圖像文件格式:圖像文件頭+圖像的點陣31BMP位圖文件類型 顏色深度的不同,就產生不同種類的圖像文件,在計算機中常使用如下類型的圖像文件:

單色圖像(黑白)

灰度圖像

偽彩色圖像(8位和16位位圖)

24位真彩色圖像32位真彩色圖像BMP位圖文件類型 顏色深度的不同,就產生不同種類的圖像文32單色圖像單色圖像中每個像素點僅占一位,其值只有0或1,0代表黑,1代表白或相反。單色圖像單色圖像中每個像素點僅占一位,其值只有0或1,0代表33灰度圖像(1)文件帶有圖像顏色表,共有256項,每一表項由紅、綠、藍三色分量組成。fred(x,y)=fgreen(x,y)=fblue(x,y)(2)每個像素由8位組成,其值范圍從0~255,像素值f(x,y)是圖像顏色表的表項入口地址。125,153,158,157,127,70,103,120,129,144,144,150,150,147,150,160,133,154,158,100,116,120,97,74,54,74,118,146,148,150,145,157,155,163,95,112,123,101,137,108,81,71,63,81,137,142,146,152,167,69,85,59,65,43,85,34,69,78,104,101,117,132,134,149,54,46,38,44,38,36,44,36,25,48,115,113,114,124,135,152,58,30,44,35,28,69,144,147,57,60,93,106,119,124,131,144,灰度圖像(1)文件帶有圖像顏色表,共有256項,每一表項34偽彩色圖像(1)圖像顏色表中的紅、綠、藍顏色分量值不全相等。fred(x,y)≠fgreen(x,y)≠fblue(x,y)(2)圖像有256種顏色,像素值是圖像顏色表的索引地址。偽彩色圖像(1)圖像顏色表中的紅、綠、藍顏色分量值不全相等35BMP文件的標準格式BMP文件的標準格式:54個字節(jié)大小的文件頭;(不包括調色板)。以字節(jié)為基本單位的圖像數據。在VC++中有標準的格式定義,兩個結構變量,可以直接使用。位圖文件的組成結構名稱符號位圖文件頭(bitmap-fileheader)BITMAPFILEHEADERbmfh位圖信息頭(bitmap-informationheader)BITMAPINFOHEADERbmih彩色表(colortable)RGBQUADaColors[]圖象數據陣列字節(jié)BYTEaBitmapBits[]BMP文件的標準格式BMP文件的標準格式:位圖文件的組成結36BMP文件格式摘要

偏移量

域的名稱

大小

內容

圖象文件頭

0000h文件標識2bytes兩字節(jié)的內容用來識別位圖的類型:‘BM’:Windows3.1x,95,NT,…‘BA’:OS/2BitmapArray‘CI’:OS/2ColorIcon‘CP’:OS/2ColorPointer‘IC’:OS/2Icon‘PT’:OS/2Pointer注:因為OS/2系統(tǒng)并沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。0002hFileSize1dword用字節(jié)表示的整個文件的大小0006hReserved1dword保留,必須設置為0000AhBitmapDataOffset1dword從文件開始到位圖數據開始之間的數據(bitmapdata)之間的偏移量BMP文件格式摘要偏移量域的名稱大小內容00037圖象信息頭001ChBitsPerPixel1word每個象素的位數1-單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)

4-16色位圖

8-256色位圖

16-16bit高彩色位圖

24-24bit真彩色位圖

32-32bit增強型真彩色位圖001EhCompression1dword壓縮說明:0-不壓縮(使用BI_RGB表示)

1-RLE8-使用8位RLE壓縮方式(用BI_RLE8表示)

2-RLE4-使用4位RLE壓縮方式(用BI_RLE4表示)

3-Bitfields-位域存放方式(用BI_BITFIELDS表示)0022hBitmapDataSize1dword用字節(jié)數表示的位圖數據的大小。該數必須是4的倍數0026hHResolution1dword用象素/米表示的水平分辨率002AhVResolution1dword用象素/米表示的垂直分辨率002EhColors1dword位圖使用的顏色數。如8-比特/象素表示為100h或者256.0032hImportantColors1dword指定重要的顏色數。當該域的值等于顏色數時(或者等于0時),表示所有顏色都一樣重要圖001ChBitsPerPixel1word38調色板數據根據BMP版本的不同而不同PaletteN*4byte調色板規(guī)范。對于調色板中的每個表項,這4個字節(jié)用下述方法來描述RGB的值:1字節(jié)用于藍色分量1字節(jié)用于綠色分量1字節(jié)用于紅色分量1字節(jié)用于填充符(設置為0)圖象數據根據BMP版本及調色板尺寸的不同而不同BitmapDataxxxbytes該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數據字節(jié),這些數據可能是彩色調色板的索引號,也可能是實際的RGB值,這將根據圖像信息頭中的位深度值來決定。調色板數據根據BMP版本的不同而不同PaletteN*439單個像素的真彩色文件分析424D-BM3A000000-文件長度00000000-》保留字節(jié)36000000---》數據區(qū)起始地址28000000--》本結構長度40個字節(jié)01000000--》位圖的寬度,以像素為單位01000000--》位圖的高度,以像素為單位0100---》目標設備的級別,必須為11800--》每個像素所需的位數24位00000000---》位圖壓縮類型,必須是004000000---》位圖的大小,以字節(jié)為單位00000000--》位圖水平分辨率,每米像素數00000000---》位圖垂直分辨率,每米像素數00000000---》位圖實際使用的顏色表中的顏色數00000000---》位圖顯示過程中重要的顏色數WinHex軟件文件標識文件頭信息頭數據區(qū)文件長度保留字節(jié)數據區(qū)起始地址信息頭結構大小位圖壓縮類型顏色表顏色數單個像素的真彩色文件分析424D-BM28000040單個像素的256偽彩色位圖文件調色板256項單個像素的256偽彩色位圖文件調色板256項41數據數據42256色位圖文件調色板數據調色板256項;所占字節(jié)數:256*4=1024;1024/16=64行;總行數43h=4*16+3=67行;文件頭占3行;所以占64行。每行16字節(jié),可以存儲4個表項,64*4=256個表項。256色位圖文件調色板數據調色板256項;43程序中圖像數據的存儲和使用圖像數據在圖像文件中存儲的方式:圖像文件只能夠以數據流的方式存取數據,所以圖像數據是以連續(xù)的字節(jié)存放的。00100111001001110010011100100111001001111234102520491024*768文件和內存中010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101顯示屏幕0,01024*768程序中圖像數據的存儲和使用圖像數據在圖像文件中存儲的方式:044圖像矩陣格式與流格式的對應點陣:寬度m_nWidth,高度m_nHeight橫向的位值X,縱向的位置Y,f(x,y)是坐標X,Y處的顏色值。數據流:f(x,y)=g(y*m_nWidth+x);g(n)數據流中n位值的顏色值。圖像矩陣格式與流格式的對應點陣:寬度m_nWidth,高度m45BMP文件存儲格式

(BMPVC中的描述) BMP文件由文件頭、位圖信息頭、顏色信息和圖像數據四部分組成。位圖結構如下所示:位圖文件頭結構BITMAPFILEHEADER位圖信息頭結構BITMAPINFOHEADER位圖顏色表RGBQUAD位圖像素數據VC6.0中用BITMAPFILEHEADER和BITMAPINFOHEADER兩個結構變量來描述BMP文件的文件頭。BMP文件存儲格式

(BMPVC中的描述) BMP文件由文46位圖文件頭(第一部分)第一部分為位圖文件頭BITMAPFILEHEADER,是一個結構,其定義如下: 這個結構的長度是固定的,為14個字節(jié)(WORD為無符號16位整數,DWORD為無符號32位整數)typedefstructtagBITMAPFILEHEADER{WORDbfType;//文件類型描述,必須為BMDWORDbfSize;//以字節(jié)為單位的圖像文件大小。WORDbfReserved1;//保留為0WORDbfReserved2;//保留為0DWORDbfOffBits;//從這個結構末尾到圖像數據開始的字節(jié)數。}BITMAPFILEHEADER,*PBITMAPFILEHEADER;位圖文件頭(第一部分)第一部分為位圖文件頭BITMAPFIL47位圖信息頭(第二部分)typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//這個結構的字節(jié)數(大?。㎜ONGbiWidth;//圖像的寬度。LONGbiHeight;//圖像的高度WORDbiPlanes;//目標設備的為平面數,指定為1。WORDbiBitCount;//每個像素點的顏色位數。(0,1,4,8,16,24,32)DWORDbiCompression;//圖像是否壓縮,壓縮格式。DWORDbiSizeImage;//圖像數據的大?。ㄗ止?jié))LONGbiXPelsPerMeter;//每個像素點的空間分辨率(每米點的個數)水平方向;LONGbiYPelsPerMeter;//每個像素點的空間分辨率(每米點的個數)垂直方向;DWORDbiClrUsed;//描述實際使用到的顏色數,0DWORDbiClrImportant;//顯示時使用的顏色數,0;}BITMAPINFOHEADER,*PBITMAPINFOHEADER;這個結構的長度是固定的,為40個字節(jié)(WORD為無符號16位整數,DWORD無符號32位整數,LONG為32位整數)位圖信息頭(第二部分)typedefstructtagB48biSizeImage字段biSizeImage 指定實際的位圖數據占用的字節(jié)數,其實也可以從以下的公式中計算出來: biSizeImage=biWidth‘*biHeight 要注意的是:上述公式中的biWidth‘必須是4的整倍數(所以不是biWidth,而是biWidth‘,表示大于或等于biWidth的,離4最近的整倍數。舉個例子,如果biWidth=240,則biWidth‘=240;如果biWidth=241,biWidth‘=244)

一定要注意:每行所占字節(jié)長度始終是4的倍數,或者每行所占位長度是32的倍數。如果不是,則需要補齊

biSizeImage字段biSizeImage49調色板/顏色表(第三部分)調色板實際上是一個四元數組,則有2的biBitCount次方個元素。數組中每個元素的類型是一個RGBQUAD結構,占4個字節(jié)。typedefstructtagRGBQUAD{ BYTE rgbBlue; //藍色分量 BYTE rgbGreen; //綠色分量 BYTE rgbRed; //紅色分量 BYTE rgbReserved;//保留值 } RGBQUAD;

注意:24位真彩色圖中沒有調色板數據!!調色板/顏色表(第三部分)調色板實際上是一個四元數組,則有250位圖信息-BITMAPINFO結構 位圖信息頭和顏色表組成位圖信息,BITMAPINFO結構定義如下:structtagBITMAPINFO{

BITMAPINFOHEADERbmiHeader;RGBQUADbmiColors[1];//顏色表}BITMAPINFO;位圖信息-BITMAPINFO結構 位圖信息頭和顏色表組成51位圖數據

結構數據域含義BITMAPFILEHEADERbfType字節(jié)“BM”bfSize文件總字節(jié)數BfReserved10BfReserved10bfOffBit位圖數據距文件頭的偏移量BITMAPINFOHEADERbiSize本結構大小的字節(jié)數biWidth位圖的寬度,單位為像素點biHeight位圖的高度,單位為像素點biPlanes1biBitCount像素的位數(1,4,8,24)biCompression壓縮方式(0表示不壓縮)bisizeImage位圖數據的字節(jié)數biXpelsPerMeter水平分辨率(像素點/米)biYpelsPerMeter垂直分辨率(像素點/米)biClrUsed圖像中使用的顏色數biClrImportant圖像中重要的顏色數RGBQUADrgbBlue藍色的比例rgbGreen綠色的比例rgbRed紅色的比例rgbReserved0位圖數據

結構數據域含義BITMAPFILEHEAD52實際的位圖數據區(qū)(第四部分)第四部分就是實際的圖象數據了。對于用到調色板的位圖,圖象數據就是該像素顏在調色板中的索引值。對于真彩色圖,圖象數據就是實際的R,G,B值。下面就2色,16色,256色位圖和真彩色位圖分別介紹。 對于2色位圖,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),所以一個字節(jié)可以表示8個像素。 對于16色位圖,用4位可以表示一個像素的顏色,所以一個字節(jié)可以表示2個像素。 對于256色位圖,一個字節(jié)剛好可以表示1個像素。 對于真彩色圖,三個字節(jié)才能表示1個像素。注意:BMP文件的數據從下到上,從左到右的。實際的位圖數據區(qū)(第四部分)第四部分就是實際的圖象數據了。53獲得文件路徑名打開位圖文件讀取BITMAPFILEHEADER結構讀取BITMAPINFOHEADER結構得到位圖大小,分配內存空間BMP格式?獲得數據的起始位置,保存起始位置指針結束開始打開BMP文件的流程圖獲得文件路徑名打開位圖文件讀取BITMAPFILEHEADE54對文件的讀取通過CFile類來完成對文件的讀取和寫入,CFile類是MFC類庫中專門完成文件讀取的類,該類內部封裝類WindowsAPI流式文件存取函數。使用簡單、易懂。對文件的讀取通過CFile類來完成對文件的讀取和寫入,CFi55數據的聲明類的聲明和相應變量、函數的定義在頭文件“.h”中完成,變量的引用和函數體在對應的“.cpp”文件中。類中的數據分為公用、保護和私有三種。公用數據用來被其他的函數和過程調用和修改,保護變量只可以調用不可以修改,而私有數據只有類內部的函數和行為可以調用和修改。這就是一種類的封裝。數據的聲明類的聲明和相應變量、函數的定義在頭文件“.h”中完56公用數據和私有數據public:intm_nTempPub;private:intm_nTempPri;protected:intm_nTempPro;公用數據和私有數據public:57各結構體內存的分配為BITMAPFILEHEADER申請一塊內存空間,用來保存圖像文件的文件頭的結構信息;BITMAPFILEHEADER*pbmfile=newBYTE[sizeof(BITMAPFILEHEADER)];為BITMAPINFO申請一塊內存空間,用來保存圖像文件的圖像結構信息;BITMAPINFO*pbmfile=newBYTE[sizeof(BITMAPINFO)];為圖像的點陣數據申請一塊內存空間,用來保存圖像點陣數據,當進行算法運算時,此數組中的數據用新的數據來替換。BYTE*=newBYTE[m_nWidth*m_nHeight];各結構體內存的分配為BITMAPFILEHEADER申請一塊58得到數據起始位置指針,并得到圖象的寬、高等信息信息使用文件中顏色表創(chuàng)建調色板調色板調入設備環(huán)境設定參數,顯示位圖恢復原調色板設定參數顯示位圖帶有顏色表?結束開始圖像顯示的流程圖得到數據起始位置指針,并得到圖象的寬、高等信息信息使用文件中59顯示圖像數據 圖像數據的顯示在視圖的類中CView中進行,在視圖的CPP文件中的OnDraw(CDC*pDC)函數中可以完成這一繪制任務。應用程序的創(chuàng)建中當創(chuàng)建到視的客戶區(qū)時既是調用改函數的默認格式完成對視區(qū)的繪制。我們只要將視區(qū)重新繪制一次即可完成繪制工作。顯示圖像數據 圖像數據的顯示在視圖的類中CView中進行,60調色板的基本應用調色板的原理調色板的創(chuàng)建與實現顯示函數調色板的基本應用調色板的原理61調色板的原理調色板就是在256色顯示系統(tǒng)中,將圖像中出現的256種顏色組成顏色表,對這些顏色按8位,即0至255進行編號,每一編號代表其中的一種顏色,在這種顏色中顏色編號叫做顏色的索引號。調色板的原理調色板就是在256色顯示系統(tǒng)中,將圖像中出現的262調色板的創(chuàng)建與實現在調色板系統(tǒng)中,每一幅圖像都有自己的調色板,顯示時必須將自己的調色板載入系統(tǒng)調色板中,實現調色板。調色板的創(chuàng)建與實現在調色板系統(tǒng)中,每一幅圖像都有自己的調色板63顯示函數在VisualC++環(huán)境中用于顯示的主要有BitBlt函數、StretchBlt函數和StretchDIBits函數。BitBlt函數和StretchBlt函數屬于CDC類,而StretchDIBits函數為API函數。顯示函數在VisualC++環(huán)境中用于顯示的主要有BitB64BitBlt()函數該函數的結構如下:BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwrop);參數說明: x:指定繪制目標矩形左上角的邏輯X軸位置。 y:指定繪制目標矩形左上角的邏輯Y軸位置。 nWidth:指定繪制目標矩形和源位圖的寬度(按邏輯單位)。 nHeight:指定繪制目標矩形和源位圖的高度(按邏輯單位)。 pSrcDC:設備上下文的指針。 xSrc,ySrc:指定源位圖左上角的邏輯X軸、Y軸位置。dwrop:指定要執(zhí)行的光柵運算。其操作碼定義了圖形設備接口(GDI)在輸出操作中如何組合顏色。當要將位圖的像素從內存顯示環(huán)境復制到顯示器(或打印機)設備環(huán)境中,一般會用到這個函數。BitBlt()函數該函數的結構如下:65StretchBlt()函數該函數的結構如下:BOOLStretchBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,DWORDdwrop);參數說明: x:指定繪制目標矩形左上角的邏輯X軸位置。 y:指定繪制目標矩形左上角的邏輯Y軸位置。 nWidth:指定繪制目標矩形的寬度(按邏輯單位)。 nHeight:指定繪制目標矩形的高度(按邏輯單位)。 pSrcDC:設備上下文的指針 xSrc,ySrc:指定源位圖左上角的坐標(按邏輯單位)。nSrcWidth,nSrcHeight:指定復制源位圖的寬度和高度(按邏輯單位)。dwrop:指定要執(zhí)行的光柵運算。其操作碼定義了圖形設備接口(GDI)在輸出操作中如何組合顏色。StretchBlt()函數該函數的結構如下:66處理圖像數據在Doc中通過兩個函數afx_msgvoidOnSobel();和BOOLCImageProcessingDoc::Template(BYTE*lpDIBBits,LONGlWidth,LONGlHeight,intiTempH,intiTempW,intiTempMX,intiTempMY,FLOAT*fpArray,FLOATfCoef);來完成,具體的函數結構和源代碼在例程中。處理圖像數據在Doc中通過兩個函數67程序范例具體編程講解。程序范例具體編程講解。68討論與答疑討論與答疑69數字圖像處理VC++編程實現安秋南京農業(yè)大學工學院數字圖像處理VC++編程實現安秋南京農業(yè)大學工學院70編程實現方法VisualC++圖像處理編程MATLAB圖像處理編程基于開源庫OpenCV的圖像處理編程基于其他庫的圖像處理編程編程實現方法VisualC++圖像處理編程71圖像處理的VC++編程VC++編程環(huán)境簡介圖像編程基礎圖像格式的理解BMP文件格式及讀寫程序范例圖像處理的VC++編程VC++編程環(huán)境簡介72 微型圖像處理系統(tǒng)既包含硬件設備,也需要一定的軟件環(huán)境支持。目前,圖像處理系統(tǒng)平臺多為MicrosoftWindows或X-Windows,開發(fā)的主流工具為Microsoft公司的VC++。這是因為VC++是一種具有高度綜合性能的軟件開發(fā)工具,用它開發(fā)出來的程序有著運行速度快、可移植能力強等優(yōu)點。本書中實例也是在Windows平臺下,用VC++6.0實現的。此外,各國的科學家和研究機構開發(fā)了不少專用的圖像處理軟件環(huán)境,下面僅對主要的幾種作一簡單介紹。 微型圖像處理系統(tǒng)既包含硬件設備,也需要一定的軟件環(huán)境支持。73VC開發(fā)環(huán)境簡介VC編程需要的知識

C/C++語言;

對Windows操作系統(tǒng)的了解(底層編程);

微軟類庫MFC(MicrosoftFoundationClass)VisualC++是一個可視化集成開發(fā)環(huán)境掌握‘工程’的概念菜單使用介紹、Debug/Release區(qū)別等等VC開發(fā)環(huán)境簡介VC編程需要的知識

C/C++語言;

對Wi74VC開發(fā)的兩種方式(一)SDK(softwaredevelopmentkit)方式

又稱WIN32API(應用程序接口)編程

即直接調用32位Windows(WIN32)操作系統(tǒng)提供的接口函數進行編程。SDK編程(VC中)使用的語言是C語言。適合底層編程和對速度要求較高的環(huán)境,比如游戲開發(fā)、驅動開發(fā)、數字圖形等看圖像打開、高斯噪聲繪制的例子VC開發(fā)的兩種方式(一)SDK(softwaredevel75VC開發(fā)的兩種方式(二)MFC方式

又稱類庫編程,即程序主要不再直接跟操作系統(tǒng)API打交道(在需要的時候也可以調用API),而是使用封裝好的C++類庫。MFC編程的好處之一:可以使用MFC向導來生成程序框架,提高效率在這堂課中后面講的程序都是MFC程序VC開發(fā)的兩種方式(二)MFC方式

又稱類庫編程,即程序主要76C++語言是一種中級語言自然語言(高級語言)中級語言低級語言(機器語言)跳過去intm_nA=10;Intm_nB=10;Intm_nC=m_nB+m_nA;MOVAL,10MOVBL,10ADDAL,BLC++語言是一種中級語言自然語言中級語言低級語言跳過去int77C++語言的優(yōu)缺點優(yōu)點:編譯語言脫離語言環(huán)境運行速度快代碼少缺點:編譯過程復雜語言可讀性差容易犯錯糾錯困難C++語言的優(yōu)缺點優(yōu)點:編譯語言缺點:編譯過程復雜78C++語言是C語言的一個超集C語言C++語言VisualC++MFCC++語言是C語言的一個超集C語言C++語言VisualC+79C++是一種面向對象的程序語言CWinApp:程序對象CMainFrame:窗口對象Cdocument:文檔對象Cview:視對象C++是一種面向對象的程序語言CWinApp:程序對象CMa80類的使用CWinApp:程序對象CMainFrame:窗口對象CDocument:文檔對象CView:視對象每一個對象的定義就是一個類,類是C++新派生的一個數據類型,比較抽象。通常情況下可以簡單理解為分類。使用:

CMainFramem_Frame;//創(chuàng)建一個類的實例,分配相應的內存。m_Frame.Create(NULL);//通過實例調用類中的變量、函數、行為等等。類的使用CWinApp:程序對象CMainFrame:窗口對81MFC類庫簡介MFC:微軟開發(fā)的C++程序的類庫,在類庫內集成了Windows程序設計所經常使用到的類,如:窗口的管理、控件的管理、文件的管理、視的管理等。同時對類進行了樹狀的管理,通過封裝和繼承實現了簡單實用的目的,而且功能強大,在Windows環(huán)境下編程和使用VC++編程應該對MFC了解。MFC類庫簡介MFC:微軟開發(fā)的C++程序的類庫,在類庫內集82指針及其使用指針是C語言中一個非常重要的數據類型,通過指針可以實現直接對內存的存取。指針的聲明:int*m_nNum;指針的賦值:m_nNum=&m_ngg;

m_nNum(0002h)*m_nNum(20h)(32)數組的使用:m_nNum=m_nArr[0];

*(m_nNum+3)==m_nArr[4];聲明變量:intm_ngg=32;intm_nArr[100];

20h00h43h1eh0000h0001h0002h1234h1235hFffeeh指針及其使用指針是C語言中一個非常重要的數據類型,指針的聲明83堆和棧的概念堆和棧是計算機管理內存的兩種方式:??臻g一般存儲臨時數據。堆空間一般存儲較大的和生命期較長的數據。C語言中,單個的臨時變量都放在棧中。intm_nNum=32;charm_cChar=‘m’;大型的數組變量放在堆中:intm_nNum[100];BYTE*m_nNum=(BYTE*)newBYTE[2000];堆和棧的概念堆和棧是計算機管理內存的兩種方式:??臻g一般存儲84new和delete操作符new操作符是C++的保留字,用來在堆中開辟一個指定大小的內存空間。BYTE*m_nData=(BYTE*)newBYTE[m_nWidth*m_nHeight];??臻g中的數據在函數調用結束,如果沒有聲明為全局變量,將被自動刪除。堆空間的變量不會自動刪除,需要程序員手工刪除。delete[]m_nData;new和delete操作符new操作符是C++的保留字,用85VC++6.0工作平臺VC++6.0工作平臺86IDE的使用菜單工具條提示欄視窗口編輯窗口輸出窗口IDE的使用菜單87窗口的概念圖示中是我們講要講到的程序的界面,它是Windows系統(tǒng)的一個標準的界面,這種窗口框架結構也是視窗系統(tǒng)的核心。1、系統(tǒng)菜單2、程序菜單3、工具條4、視空間5、提示條窗口的概念圖示中是我們講要講到的程序的界面,它是Window88文檔/視圖的概念文檔/視圖結構是Windows窗口結構中的標準形式。在單文檔窗口程序中,生成一個單文檔模板和窗口視圖對應,這時視圖是由窗口生成的。在多文檔界面中,窗口類只生成主框架,而子窗口和子視圖有文檔模板生成。文檔/視圖的概念文檔/視圖結構是Windows窗口結構中的標89視的概念視結構是窗口中的客戶區(qū),用戶可以在視區(qū)中畫文字、畫圖像等等任意的屏幕的寫操作。WindowsGUI對視結構做了優(yōu)化,用戶可以方便的調用MFC類庫中的相關類完成復雜的任務。視的概念視結構是窗口中的客戶區(qū),用戶可以在視區(qū)中畫文字、畫圖90開始程序設計1、聲明一個文件操作類:CFileRW2、在文件類內完成對BMP文件的讀寫操作。3、在CDoc類中調用CFileRW類的實例完成運算工作,同時在Doc中響應菜單的消息命令。4、在CFileRW中創(chuàng)建存放文件數據的堆變量數組,并以指針的形式完成調用。5、在Doc中實現對堆數組的用后刪除。開始程序設計1、聲明一個文件操作類:CFileRW91計算機軟件及應用]數字圖像處理VC++編程實現課件92圖像在計算機中的理解這是一張計算機桌面的圖像:0,01024,7681024,00,768XY基本元素:圖像空間的大?。?024*768個像素。每個點的坐標(x,y)。顏色分辨率:32位彩色圖像。00000000000000000000000011111111RBGA像素圖像在計算機中的理解這是一張計算機桌面的圖像:0,0102493三基色三基色94調色板在Windows操作系統(tǒng)內部默認存在著一個調色板,調色板的顏色是和顯示卡的顏色能力相對應的,當前的真彩色卡支持3-4個字節(jié)一個點的彩色表,一般第四個字節(jié)用于透明顯示通道。調色板中用8位的一個字節(jié)表示一種顏色分量,R或者G、B。所有的可能的顏色的組合為2^24。這也是VGA顯示卡能夠顯示的最多的顏色數。所以我們把具有24位顏色的圖像,叫做真彩色圖像。調色板在Windows操作系統(tǒng)內部默認存在著一個調色板,調色95分辨率的概念圖像的分辨率越高,圖像的空間點陣數越多;圖像的顏色分辨率越高,表示每個像素點的字節(jié)數越多;圖像的存儲空間大?。ㄗ止?jié)):空間點陣數*每個像素點的顏色字節(jié)數。分辨率的概念圖像的分辨率越高,圖像的空間點陣數越多;96圖像的矩陣格式00000000000000011111111101010101000101010000000100000001000000011110000100000001000000010000000101100101001110010001011100000001圖像在二進制格式中的形式1位表示一個點,兩種顏色組合,黑白圖像。4位表示一個點,16種顏色組合,16種顏色索引圖像8位表示一個點,256種顏色組合,256種顏色索引圖像。16位,24位,32位。0,01024PIXELS768PIXELS圖像實際的存儲空間大小:1024*768*24/8=2304K=2.25M(字節(jié))圖像的矩陣格式0000000000000001111111197圖像的大小有一個長寬各為200個象素,顏色數為16色的彩色圖,每一個象素都用R,G,B三個分量表示,因為每個分量有256個級別,要用8位即一個字節(jié)來表示,所以每個象素需要用3個字節(jié)。整個圖象要用200*200*3,約120k字節(jié)。這幅圖中最多只有16種顏色,我們可以用一個表:表中的每一行記錄一種顏色的R,G,B值。這樣當我們表示一個象素的顏色時,只需要指出該顏色是在第幾行,即該顏色在表中的索引值。舉個例子,如果表的第0行為255,0,0(紅色),那么當某個象素為紅色時,只需要標明0即可。再來計算一下:16種狀態(tài)可以用4位表示,所以一個象素要用半個字節(jié)。整個圖象要用200*200*0.5,約20k字節(jié),再加上表占用的字節(jié)為3*16=48字節(jié)。整個占用的字節(jié)數約為前面的1/6!圖像的大小有一個長寬各為200個象素,顏色數為16色的彩色圖98圖像文件中對上述特征的處理圖像的永久保存是存儲到圖像文件中。由于圖像具有各種不同的特征,所以在存儲文件時應該予以細致的描述:圖像大小、顏色分辨率的大小、是否壓縮、是否自己定義調色板等等。這些信息都包含在圖像文件的文件頭中。圖像文件中對上述特征的處理圖像的永久保存是存儲到圖像文件中。99圖像文件的格式類型標準的圖像文件格式:圖像文件頭+圖像的點陣數據。常用的圖像文件格式:BMP\GIF\JPG\PCX等等。圖像文件的格式類型標準的圖像文件格式:圖像文件頭+圖像的點陣100BMP位圖文件類型 顏色深度的不同,就產生不同種類的圖像文件,在計算機中常使用如下類型的圖像文件:

單色圖像(黑白)

灰度圖像

偽彩色圖像(8位和16位位圖)

24位真彩色圖像32位真彩色圖像BMP位圖文件類型 顏色深度的不同,就產生不同種類的圖像文101單色圖像單色圖像中每個像素點僅占一位,其值只有0或1,0代表黑,1代表白或相反。單色圖像單色圖像中每個像素點僅占一位,其值只有0或1,0代表102灰度圖像(1)文件帶有圖像顏色表,共有256項,每一表項由紅、綠、藍三色分量組成。fred(x,y)=fgreen(x,y)=fblue(x,y)(2)每個像素由8位組成,其值范圍從0~255,像素值f(x,y)是圖像顏色表的表項入口地址。125,153,158,157,127,70,103,120,129,144,144,150,150,147,150,160,133,154,158,100,116,120,97,74,54,74,118,146,148,150,145,157,155,163,95,112,123,101,137,108,81,71,63,81,137,142,146,152,167,69,85,59,65,43,85,34,69,78,104,101,117,132,134,149,54,46,38,44,38,36,44,36,25,48,115,113,114,124,135,152,58,30,44,35,28,69,144,147,57,60,93,106,119,124,131,144,灰度圖像(1)文件帶有圖像顏色表,共有256項,每一表項103偽彩色圖像(1)圖像顏色表中的紅、綠、藍顏色分量值不全相等。fred(x,y)≠fgreen(x,y)≠fblue(x,y)(2)圖像有256種顏色,像素值是圖像顏色表的索引地址。偽彩色圖像(1)圖像顏色表中的紅、綠、藍顏色分量值不全相等104BMP文件的標準格式BMP文件的標準格式:54個字節(jié)大小的文件頭;(不包括調色板)。以字節(jié)為基本單位的圖像數據。在VC++中有標準的格式定義,兩個結構變量,可以直接使用。位圖文件的組成結構名稱符號位圖文件頭(bitmap-fileheader)BITMAPFILEHEADERbmfh位圖信息頭(bitmap-informationheader)BITMAPINFOHEADERbmih彩色表(colortable)RGBQUADaColors[]圖象數據陣列字節(jié)BYTEaBitmapBits[]BMP文件的標準格式BMP文件的標準格式:位圖文件的組成結105BMP文件格式摘要

偏移量

域的名稱

大小

內容

圖象文件頭

0000h文件標識2bytes兩字節(jié)的內容用來識別位圖的類型:‘BM’:Windows3.1x,95,NT,…‘BA’:OS/2BitmapArray‘CI’:OS/2ColorIcon‘CP’:OS/2ColorPointer‘IC’:OS/2Icon‘PT’:OS/2Pointer注:因為OS/2系統(tǒng)并沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。0002hFileSize1dword用字節(jié)表示的整個文件的大小0006hReserved1dword保留,必須設置為0000AhBitmapDataOffset1dword從文件開始到位圖數據開始之間的數據(bitmapdata)之間的偏移量BMP文件格式摘要偏移量域的名稱大小內容000106圖象信息頭001ChBitsPerPixel1word每個象素的位數1-單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)

4-16色位圖

8-256色位圖

16-16bit高彩色位圖

24-24bit真彩色位圖

32-32bit增強型真彩色位圖001EhCompression1dword壓縮說明:0-不壓縮(使用BI_RGB表示)

1-RLE8-使用8位RLE壓縮方式(用BI_RLE8表示)

2-RLE4-使用4位RLE壓縮方式(用BI_RLE4表示)

3-Bitfields-位域存放方式(用BI_BITFIELDS表示)0022hBitmapDataSize1dword用字節(jié)數表示的位圖數據的大小。該數必須是4的倍數0026hHResolution1dword用象素/米表示的水平分辨率002AhVResolution1dword用象素/米表示的垂直分辨率002EhColors1dword位圖使用的顏色數。如8-比特/象素表示為100h或者256.0032hImportantColors1dword指定重要的顏色數。當該域的值等于顏色數時(或者等于0時),表示所有顏色都一樣重要圖001ChBitsPerPixel1word107調色板數據根據BMP版本的不同而不同PaletteN*4byte調色板規(guī)范。對于調色板中的每個表項,這4個字節(jié)用下述方法來描述RGB的值:1字節(jié)用于藍色分量1字節(jié)用于綠色分量1字節(jié)用于紅色分量1字節(jié)用于填充符(設置為0)圖象數據根據BMP版本及調色板尺寸的不同而不同BitmapDataxxxbytes該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數據字節(jié),這些數據可能是彩色調色板的索引號,也可能是實際的RGB值,這將根據圖像信息頭中的位深度值來決定。調色板數據根據BMP版本的不同而不同PaletteN*4108單個像素的真彩色文件分析424D-BM3A000000-文件長度00000000-》保留字節(jié)36000000---》數據區(qū)起始地址28000000--》本結構長度40個字節(jié)01000000--》位圖的寬度,以像素為單位01000000--》位圖的高度,以像素為單位0100---》目標設備的級別,必須為11800--》每個像素所需的位數24位00000000---》位圖壓縮類型,必須是004000000---》位圖的大小,以字節(jié)為單位00000000--》位圖水平分辨率,每米像素數00000000---》位圖垂直分辨率,每米像素數00000000---》位圖實際使用的顏色表中的顏色數00000000---》位圖顯示過程中重要的顏色數WinHex軟件文件標識文件頭信息頭數據區(qū)文件長度保留字節(jié)數據區(qū)起始地址信息頭結構大小位圖壓縮類型顏色表顏色數單個像素的真彩色文件分析424D-BM280000109單個像素的256偽彩色位圖文件調色板256項單個像素的256偽彩色位圖文件調色板256項110數據數據111256色位圖文件調色板數據調色板256項;所占字節(jié)數:256*4=1024;1024/16=64行;總行數43h=4*16+3=67行;文件頭占3行;所以占64行。每行16字節(jié),可以存儲4個表項,64*4=256個表項。256色位圖文件調色板數據調色板256項;112程序中圖像數據的存儲和使用圖像數據在圖像文件中存儲的方式:圖像文件只能夠以數據流的方式存取數據,所以圖像數據是以連續(xù)的字節(jié)存放的。00100111001001110010011100100111001001111234102520491024*768文件和內存中010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101顯示屏幕0,01024*768程序中圖像數據的存儲和使用圖像數據在圖像文件中存儲的方式:0113圖像矩陣格式與流格式的對應點陣:寬度m_nWidth,高度m_nHeight橫向的位值X,縱向的位置Y,f(x,y)是坐標X,Y處的顏色值。數據流:f(x,y)=g(y*m_nWidth+x);g(n)數據流中n位值的顏色值。圖像矩陣格式與流格式的對應點陣:寬度m_nWidth,高度m114BMP文件存儲格式

(BMPVC中的描述) BMP文件由文件頭、位圖信息頭、顏色信息和圖像數據四部分組成。位圖結構如下所示:位圖文件頭結構BITMAPFILEHEADER位圖信息頭結構BITMAPINFOHEADER位圖顏色表RGBQUAD位圖像素數據VC6.0中用BITMAPFILEHEADER和BITMAPINFOHEADER兩個結構變量來描述BMP文件的文件頭。BMP文件存儲格式

(BMPVC中的描述) BMP文件由文115位圖文件頭(第一部分)第一部分為位圖文件頭BITMAPFILEHEADER,是一個結構,其定義如下: 這個結構的長度是固定的,為14個字節(jié)(WORD為無符號16位整數,DWORD為無符號32位整數)typedefstructtagBITMAPFILEHEADER{WORDbfType;//文件類型描述,必須為BMDWORDbfSize;//以字節(jié)為單位的圖像文件大小。WORDbfReserved1;//保留為0WORDbfReserved2;//保留為0DWORDbfOffBits;//從這個結構末尾到圖像數據開始的字節(jié)數。}BITMAPFILEHEADER,*PBITMAPFILEHEADER;位圖文件頭(第一部分)第一部分為位圖文件頭BITMAPFIL116位圖信息頭(第二部分)typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//這個結構的字節(jié)數(大?。㎜ONGbiWidth;//圖像的寬度。LONGbiHeight;//圖像的高度WORDbiPlanes;//目標設備的為平面數,指定為1。WORDbiBitCount;//每個像素點的顏色位數。(0,1,4,8,16,24,32)DWORDbiCompression;//圖像是否壓縮,壓縮格式。DWORDbiSizeImage;//圖像數據的大?。ㄗ止?jié))LONGbiXPelsPerMeter;//每個像素點的空間分辨率(每米點的個數)水平方向;LONGbiYPelsPerMeter;//每個像素點的空間分辨率(每米點的個數)垂直方向;DWORDbiClrUsed;//描述實際使用到的顏色數,0DWORDbiClrImportant;//顯示時使用的顏色數,0;}BITMAPINFOHEADER,*PBITMAPINFOHEADER;這個結構的長度是固定的,為40個字節(jié)(WORD為無符號16位整數,DWORD無符號32位整數,LONG為32位整數)位圖信息頭(第二部分)typedefstructtagB117biSizeImage字段biSizeImage 指定實際的位圖數據占用的字節(jié)數,其實也可以從以下的公式中計算出來: biSizeImage=biWidth‘*biHeight 要注意的是:上述公式中的biWidth‘必須是4的整倍數(所以不是biWidth,而是biWidth‘,表示大于或等于biWidth的,離4最近的整倍數。舉個例子,如果biWidth=240,則biWidth‘=240;如果biWidth=241,biWidth‘=244)

一定要注意:每行所占字節(jié)長度始終是4的倍數,或者每行所占位長度是32的倍數。如果不是,則需要補齊

biSizeImage字段biSizeImage118調色板/顏色表(第三部分)調色板實際上是一個四元數組,則有2的biBitCount次方個元素。數組中每個元素的類型是一個RGBQUAD結構,占4個字節(jié)。typedefstructtagRGBQUAD{ BYTE rgbBlue; //藍色分量 BYTE rgbGreen; //綠色分量 BYTE rgbRed; //紅色分量 BYTE rgbReserved;//保留值 } RGBQUAD;

注意:24位真彩色圖中沒有調色板數據!!調色板/顏色表(第三部分)調色板實際上是一個四元數組,則有2119位圖信息-BITMAPINFO結構 位圖信息頭和顏色表組成位圖信息,BITMAPINFO結構定義如下:structtagBITMAPINFO{

BITMAPINFOHEADERbmiHeader;RGBQUADbmiColors[1];//顏色表}BITMAPINFO;位圖信息-BITMAPINFO結構 位圖信息頭和顏色表組成120位圖數據

結構數據域含義BITMAPFILEHEADERbfType字節(jié)“BM”bfSize文件總字節(jié)數BfReserved10BfReserved10bfOffBit位圖數據距文件頭的偏移量BITMAPINFOHEADERbiSize本結構大小的字節(jié)數biWidth位圖的寬度,單位為像素點biHeight位圖的高度,單位為像素點biPlanes1biBitCount像素的位數(1,4,8,24)biCompression壓縮方式(0表示不壓縮)bisizeImage位圖數據的字節(jié)數biXpelsPerMeter水平分辨率(像素點/米)biYpelsPerMeter垂直分辨率(像素點/米)biClrUsed圖像中使用的顏色數biClrImportant圖像中重要的顏色數RGBQUADrgbBlue藍色的比例rgbGreen綠色的比例rgbRed紅色的比例rgbReserved0位圖數據

結構數據域含義BITMAPFILEHEAD121實際的位圖數據區(qū)(第四部分)第四部分就是實際的圖象數據了。對于用到調色板的位圖,圖象數據就是該像素顏在調色板中的索引值。對于真彩色圖,圖象數據就是實際的R,G,B值。下面就2色,16色,256色位圖和真彩色位圖分別介紹。 對于2色位圖,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),所以一個字節(jié)可以表示8個像素。 對于16色位圖,用4位可以表示一

溫馨提示

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

最新文檔

評論

0/150

提交評論