數位影像處理編成入門筆記——第一章Windows位元影像和調色盤

來源:互聯網
上載者:User

1.1 位元影像和調色盤的概念

1. 真彩色圖: 它的顏色數高達256×256×256種,也就是說包含我們上述提到的R、G、B顏色表示方法中所有的顏色。真彩色圖是說它具有顯示所有顏色的能力,即最多可以包含所有的顏色。

 

1.2 bmp檔案格式

(WORD為無符號16位整數,DWORD為無符號32位整數,LONG為32長整型)

1.      bmp檔案大體上分成四個部分:

1)位元影像檔案頭BITMAPFILEHEADER,共14個位元組。

2)位元影像資訊頭BITMAPINFOHEADER,共40個位元組。

3)調色盤Palette

4)實際的位元影像資料ImageDate

調色盤實際上是一個數組,共有biClrUsed個元素(如果該值為零,則有 個元素)。數組中每個元素的類型是一個RGBQUAD結構,佔4個位元組。(紅色,綠色與藍色的排序與一般影像檔的顏色資料排序恰好相反~)

對於用到調色盤的位元影像,圖象資料就是該象素顏在調色盤中的索引值。對於真彩色圖,圖象資料就是實際的R、G、B值

 

2. 要注意兩點:

1) 每一行的位元組數必須是4的整倍數,如果不是,則需要補齊。

2) 一般來說,BMP檔案的資料從下到上,從左至右的

 

1.3 顯示一個bmp檔案的C程式

一,loadBmpFile函數實現過程:

1.    開啟檔案到HFILE結構變數中。

2.    從HFILE變數中讀取BITMPFILEHEADER和BITMAPINFOHEADER兩個結構變數。

3.    計算映像行位元組數和映像總位元組數。

4.    計算實際使用到的顏色個數並驗證結果.

5.    填寫bf.bfsize;

6.    分配全域記憶體空間,大小為(bitmapinfoheader+palette+實際映像)返回一個控制代碼。

7.    LPBITMAPINFOHEADER指向分配的全域記憶體空間。

8.    檔案指標重新置放到BITMAPINFOHEADER開始處並將內容讀入LPBITMAPINFOHEADER類型指標中。關閉檔案。_hread和_lread的區別。

9.    NumColors不為零時,說明用到了調色盤。為邏輯調色盤分配局部記憶體,大小為邏輯調色盤結構長度加NumColors個PALETTENTRY。

10.LOGPALETTE類型指標pPal指向該記憶體區,填寫邏輯調色盤結構的頭。lpRGB指向的是調色盤開始的位置,填寫pPal->palPalEntry的每一項。

11.產生邏輯調色盤全域變數hPalette,解鎖並釋放局部記憶體。

12.獲得裝置上下文控制代碼。

13.如果產生了邏輯調色盤,將新的邏輯調色盤選入DC,將舊的邏輯調色盤控制代碼儲存在hPrevPalette中。

14.產生位元影像控制代碼。使用完現在的調色盤,就要把原來的調色盤還原至DC中。

15.釋放裝置上下文,解鎖記憶體區。

 

二,響應WM_PAINT訊息:

1.    獲得螢幕裝置上下文BeginPaint和GetDC的區別。

2.    建立一個記憶體裝置上下文。當有調色盤,將調色盤選入螢幕裝置上下文和記憶體裝置上下文。

3.    將位元影像選入記憶體裝置上下文,顯示位元影像,釋放記憶體裝置上下文,釋放螢幕裝置上下文。

注意:1)要2個DC的原因是,在繪製位元影像時要將源(記憶體)裝置上下文的內容複寫到目的(螢幕)裝置上下文中。

 

   書提供的代碼運行都有問題,經過修改,錯誤是沒了,不過就是圖片顯示不出來!而且對它的代碼還有一些不太明白,比如系統如何發送WM_LOADBITMAP這個訊息的呢?

 

終於解決了!!

答:看書上提供的代碼時沒有注意到有一個.rc為尾碼的資源檔,裡面定義了一個menu,menu裡面有一個子控制項open,它和WM_LOADBITMAP關聯。以前從來沒想過去手動編輯資源檔,要不是昨天開始嘗試使用dos下編譯c++檔案,怎麼也沒想要開啟這個檔案看看。看來放一放還是對了,忍了這麼久終於解放了!稍後寫一篇關於如果VC資源檔結構的文章,對以後學習有協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.