灰階圖Gray Scale Image 或是 Gray Scale Image

來源:互聯網
上載者:User

http://blog.csdn.net/ooakk/article/details/7261961

 

1.灰階圖Gray Scale Image 定義

Gray Scale Image 或是 Gray Scale Image,56階。又稱灰階圖。把白色與黑色之間按對數關係分為若干等級,稱為灰階。灰階分為2用灰階表示的映像稱作灰階圖。
什麼叫灰階圖?任何顏色都有紅、綠、藍三原色組成,假如原來某點的顏色為RGB(R,G,B),那麼,我們可以通過下面幾種方法,將其轉換為灰階:
  1.浮點演算法:Gray=R*0.3+G*0.59+B*0.11
  2.整數方法:Gray=(R*30+G*59+B*11)/100
  3.移位方法:Gray =(R*76+G*151+B*28)>>8;
  4.平均值法:Gray=(R+G+B)/3;
  5.僅取綠色:Gray=G;
  通過上述任一種方法求得Gray後,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰階圖了。

在嵌入式系統中採用灰階圖顯示可以顯著降低顯示RAM容量的要求。


參考連結:

(1)http://baike.baidu.com/view/1184366.htm

(2) http://en.wikipedia.org/wiki/Grayscale

【附】RGB映像的各種格式

RGB565使用16位表示一個像素,這16位中的5位用於R,6位用於G,5位用於B。程式中通常使用一個字(WORD,一個字等於兩個位元組)來操作一個像素。當讀出一個像素後,這個字的各各位意義如下:
  高位元組 低位元組
  R R R R R G G G G G G B B B B B

可以組合使用屏蔽字和移位操作來得到RGB各分量的值:

[cpp]
view plaincopyprint?
  1.   #define RGB565_MASK_RED 0xF800  
  2.   #define RGB565_MASK_GREEN 0x07E0  
  3.   #define RGB565_MASK_BLUE 0x001F  
  4.   R = (wPixel & RGB565_MASK_RED) >> 11; // 取值範圍0-31
      
  5.   G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值範圍0-63
      
  6.   B = wPixel & RGB565_MASK_BLUE; // 取值範圍0-31
      
  7.   #define RGB(r,g,b) (unsigned int)( (r/0x08 << 11) | (g/0x08 << 6) | b/0x08 )  
  8.   #define RGB(r,g,b) (unsigned int)( (r/0x08 << 10) | (g/0x08 << 5) | b/0x08 )  
  #define RGB565_MASK_RED 0xF800  #define RGB565_MASK_GREEN 0x07E0  #define RGB565_MASK_BLUE 0x001F  R = (wPixel & RGB565_MASK_RED) >> 11; // 取值範圍0-31  G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值範圍0-63  B = wPixel & RGB565_MASK_BLUE; // 取值範圍0-31  #define RGB(r,g,b) (unsigned int)( (r/0x08 << 11) | (g/0x08 << 6) | b/0x08 )  #define RGB(r,g,b) (unsigned int)( (r/0x08 << 10) | (g/0x08 << 5) | b/0x08 )

該代碼可以解決24位與16位相互轉換的問題

RGB555是另一種16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一個字讀出一個像素後,這個字的各個位意義如下:
  高位元組 低位元組
  X R R R R G G G G G B B B B B (X表示不用,可以忽略)
可以組合使用屏蔽字和移位操作來得到RGB各分量的值:

[cpp]
view plaincopyprint?
  1.   #define RGB555_MASK_RED 0x7C00  
  2.   #define RGB555_MASK_GREEN 0x03E0  
  3.   #define RGB555_MASK_BLUE 0x001F  
  4.   R = (wPixel & RGB555_MASK_RED) >> 10; // 取值範圍0-31
      
  5.   G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值範圍0-31
      
  6.   B = wPixel & RGB555_MASK_BLUE; // 取值範圍0-31  
  #define RGB555_MASK_RED 0x7C00  #define RGB555_MASK_GREEN 0x03E0  #define RGB555_MASK_BLUE 0x001F  R = (wPixel & RGB555_MASK_RED) >> 10; // 取值範圍0-31  G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值範圍0-31  B = wPixel & RGB555_MASK_BLUE; // 取值範圍0-31


RGB24使用24位來表示一個像素,RGB分量都用8位表示,取值範圍為0-255。注意在記憶體中RGB各分量的排列順序為:BGR BGR BGR…。通常可以使用RGBTRIPLE資料結構來操作一個像素,它的定義為:
  typedef struct tagRGBTRIPLE { 
  BYTE rgbtBlue; // 藍色分量
  BYTE rgbtGreen; // 綠色分量
  BYTE rgbtRed; // 紅色分量
  } RGBTRIPLE;

參考:網路資料。

 

1.灰階圖Gray Scale Image 定義

Gray Scale Image 或是 Gray Scale Image,56階。又稱灰階圖。把白色與黑色之間按對數關係分為若干等級,稱為灰階。灰階分為2用灰階表示的映像稱作灰階圖。
什麼叫灰階圖?任何顏色都有紅、綠、藍三原色組成,假如原來某點的顏色為RGB(R,G,B),那麼,我們可以通過下面幾種方法,將其轉換為灰階:
  1.浮點演算法:Gray=R*0.3+G*0.59+B*0.11
  2.整數方法:Gray=(R*30+G*59+B*11)/100
  3.移位方法:Gray =(R*76+G*151+B*28)>>8;
  4.平均值法:Gray=(R+G+B)/3;
  5.僅取綠色:Gray=G;
  通過上述任一種方法求得Gray後,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰階圖了。

在嵌入式系統中採用灰階圖顯示可以顯著降低顯示RAM容量的要求。


參考連結:

(1)http://baike.baidu.com/view/1184366.htm

(2) http://en.wikipedia.org/wiki/Grayscale

【附】RGB映像的各種格式

RGB565使用16位表示一個像素,這16位中的5位用於R,6位用於G,5位用於B。程式中通常使用一個字(WORD,一個字等於兩個位元組)來操作一個像素。當讀出一個像素後,這個字的各各位意義如下:
  高位元組 低位元組
  R R R R R G G G G G G B B B B B

可以組合使用屏蔽字和移位操作來得到RGB各分量的值:

[cpp]
view plaincopyprint?
  1.   #define RGB565_MASK_RED 0xF800  
  2.   #define RGB565_MASK_GREEN 0x07E0  
  3.   #define RGB565_MASK_BLUE 0x001F  
  4.   R = (wPixel & RGB565_MASK_RED) >> 11; // 取值範圍0-31
      
  5.   G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值範圍0-63
      
  6.   B = wPixel & RGB565_MASK_BLUE; // 取值範圍0-31
      
  7.   #define RGB(r,g,b) (unsigned int)( (r/0x08 << 11) | (g/0x08 << 6) | b/0x08 )  
  8.   #define RGB(r,g,b) (unsigned int)( (r/0x08 << 10) | (g/0x08 << 5) | b/0x08 )  
  #define RGB565_MASK_RED 0xF800  #define RGB565_MASK_GREEN 0x07E0  #define RGB565_MASK_BLUE 0x001F  R = (wPixel & RGB565_MASK_RED) >> 11; // 取值範圍0-31  G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值範圍0-63  B = wPixel & RGB565_MASK_BLUE; // 取值範圍0-31  #define RGB(r,g,b) (unsigned int)( (r/0x08 << 11) | (g/0x08 << 6) | b/0x08 )  #define RGB(r,g,b) (unsigned int)( (r/0x08 << 10) | (g/0x08 << 5) | b/0x08 )

該代碼可以解決24位與16位相互轉換的問題

RGB555是另一種16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一個字讀出一個像素後,這個字的各個位意義如下:
  高位元組 低位元組
  X R R R R G G G G G B B B B B (X表示不用,可以忽略)
可以組合使用屏蔽字和移位操作來得到RGB各分量的值:

[cpp]
view plaincopyprint?
  1.   #define RGB555_MASK_RED 0x7C00  
  2.   #define RGB555_MASK_GREEN 0x03E0  
  3.   #define RGB555_MASK_BLUE 0x001F  
  4.   R = (wPixel & RGB555_MASK_RED) >> 10; // 取值範圍0-31
      
  5.   G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值範圍0-31
      
  6.   B = wPixel & RGB555_MASK_BLUE; // 取值範圍0-31  
  #define RGB555_MASK_RED 0x7C00  #define RGB555_MASK_GREEN 0x03E0  #define RGB555_MASK_BLUE 0x001F  R = (wPixel & RGB555_MASK_RED) >> 10; // 取值範圍0-31  G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值範圍0-31  B = wPixel & RGB555_MASK_BLUE; // 取值範圍0-31


RGB24使用24位來表示一個像素,RGB分量都用8位表示,取值範圍為0-255。注意在記憶體中RGB各分量的排列順序為:BGR BGR BGR…。通常可以使用RGBTRIPLE資料結構來操作一個像素,它的定義為:
  typedef struct tagRGBTRIPLE { 
  BYTE rgbtBlue; // 藍色分量
  BYTE rgbtGreen; // 綠色分量
  BYTE rgbtRed; // 紅色分量
  } RGBTRIPLE;

參考:網路資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.