• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      灰度位圖的定義和轉(zhuǎn)換

      2019-01-20 02:42:06袁智勇劉文林
      關(guān)鍵詞:轉(zhuǎn)換

      袁智勇 劉文林

      摘? 要:該文首先介紹了灰度位圖的背景知識(shí),包括灰度位圖的定義、特點(diǎn)、應(yīng)用范圍。接著介紹了全彩色和灰度色彩轉(zhuǎn)換的算法。最后演示了基于GDI+的,將全彩色位圖轉(zhuǎn)換為灰度位圖的核心代碼。該代碼使用了GDI+的Bitmap類,并通過(guò)其成員函數(shù)ConvertFormat進(jìn)行位圖格式轉(zhuǎn)換。特點(diǎn)是代碼高度簡(jiǎn)單,程序員無(wú)須了解位圖格式轉(zhuǎn)換,顏色轉(zhuǎn)換等的細(xì)節(jié),大大降低了編碼難度和復(fù)雜度。

      關(guān)鍵詞:灰度位圖;轉(zhuǎn)換;GDI+

      中圖分類號(hào):TP391? ? ? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A

      0 引言

      網(wǎng)上關(guān)于灰度位圖(grayscale bitmap)的介紹雖然不少,但大多數(shù)都只是觸及點(diǎn)皮毛,沒(méi)有交代清楚其原理,使初學(xué)者一知半解。該文對(duì)灰度位圖做了一個(gè)原理性的介紹,使初學(xué)者徹底弄明白灰度圖像的原理。同樣的,網(wǎng)上關(guān)于彩色圖像轉(zhuǎn)換為灰度圖像的代碼也很多,但過(guò)于煩瑣,該文也介紹了1種簡(jiǎn)便的轉(zhuǎn)換方法。

      1 灰度位圖的定義

      顧名思義,灰度位圖的所有像素都是灰色的。灰色是一類特殊的顏色,其R(紅色),G(綠色),B(藍(lán)色)三原色分量的值都是一樣的。如果以(R,G,B)的格式表示顏色,那么(0,0,0),(1,1,1),(2,2,2),……,(254,254,254),(255,255,255),總共256種顏色都是灰色。全0的黑色和全255的白色都是灰色的特例,其中黑色最暗,白色最亮。R,G,B三原色分量的大小代表了三原色的亮度,因此各種灰色的差別在于其亮度不同。

      因?yàn)轭伾珒H限于256種灰色(這256種灰色構(gòu)成灰度位圖的顏色表),為了減少存儲(chǔ)空間,灰度位圖統(tǒng)一使用索引位圖的格式來(lái)存儲(chǔ)。也就是說(shuō),灰度位圖的像素值不是直接存儲(chǔ)為24 bit的(R,G,B)顏色,而是存儲(chǔ)為顏色表的索引號(hào)。例如如果某個(gè)灰度位圖的像素值是1,那么它對(duì)應(yīng)的實(shí)際顏色是顏色表中編號(hào)為1的顏色,也就是(1,1,1)??梢钥闯?,索引號(hào)同時(shí)代表了對(duì)應(yīng)灰度顏色的亮度。例如,當(dāng)索引號(hào)為0時(shí),對(duì)應(yīng)的顏色是黑色(0,0,0),亮度為0;當(dāng)索引號(hào)為255時(shí),對(duì)應(yīng)的顏色時(shí)白色(255,255,255),亮度為255。表達(dá)256種索引號(hào)只需8 bit(1字節(jié))數(shù)據(jù),而直接表達(dá)(R,G,B)顏色需要24 bit(3字節(jié))數(shù)據(jù),所以使用索引位圖格式能大大節(jié)省存儲(chǔ)空間。

      將有16 777 216(224)種顏色的24 bit全彩色位圖轉(zhuǎn)換為只有256(28)種灰色的灰度位圖無(wú)疑會(huì)丟失圖像的細(xì)節(jié),盡管如此,灰度位圖的應(yīng)用卻非常廣泛。

      首先,這種轉(zhuǎn)換能將彩色圖像轉(zhuǎn)換為黑白圖像,這是一種非常有用的特效。

      其次,這種轉(zhuǎn)換在丟失細(xì)節(jié)的同時(shí),往往能使圖像中物體的輪廓變得更明顯。就像黑白證件照的底片,雖然細(xì)節(jié)很模糊,但人物的輪廓卻很明顯。這使得灰度位圖在文字識(shí)別、圖像識(shí)別中得到了廣泛的應(yīng)用。

      2 顏色轉(zhuǎn)換

      將24bit全彩色位圖轉(zhuǎn)換為8bit灰色位圖的原則是將彩色轉(zhuǎn)換為與之最接近的灰色。關(guān)于什么是最接近,在不同的場(chǎng)合下,解讀是不同的。對(duì)于灰度圖像轉(zhuǎn)換,我們是依據(jù)全彩色圖像的亮度,將其轉(zhuǎn)換為同等亮度的灰度顏色。其公式為:

      I= R× 0.299 + G×0.587 + B×0.114 ? ? ? ? ? ? ? (1)

      I代表索引號(hào)。前面提到過(guò),索引號(hào)同時(shí)代表了對(duì)應(yīng)灰度顏色的亮度。所以上面的公式實(shí)際上按照全彩色R、G、B顏色分量的亮度,將其映射到對(duì)應(yīng)亮度的灰度顏色。0.299、0.587 、0.114分別代表了R、G、B顏色分量的權(quán)重??梢钥闯觯G色分量的權(quán)重最大,這是因?yàn)槿祟悓?duì)綠色亮度的變化更敏感。

      3 關(guān)于GDI+

      GDI+是微軟針對(duì)傳統(tǒng)的GDI(Graphic Device Interface,圖形設(shè)備界面)技術(shù)的改進(jìn)。和GDI不同,GDI+的編程接口是面向?qū)ο蟮?,將底層代碼封裝于各種類中,這使得編程難度大大降低。其次,在圖像格式轉(zhuǎn)換、圖像變換等方面引入了很多新的類成員函數(shù),程序員簡(jiǎn)單調(diào)用這些函數(shù)就可以完成以前通過(guò)GDI無(wú)法直接完成的工作。

      舉個(gè)例子,在GDI+中位圖被封裝為Bitmap類,以下C++代碼可以讀取硬盤上的位圖文件test.bmp(假定其為24 bit全彩色位圖),輕松構(gòu)造一個(gè)Bitmap類:

      Bitmap bmp=new Bitmap(L”C:\\test.bmp”);

      下一步,我們可以通過(guò)Bitmap的類成員函數(shù)操作test.bmp,例如將其轉(zhuǎn)換為灰度位圖。對(duì)應(yīng)的函數(shù)如下:

      ConvertFormat(PixelFormat format,

      DitherType dithertype,PaletteType palettetype,

      ColorPalette *palette,REAL alphaThresholdPercent);

      format參數(shù)指定轉(zhuǎn)換后的位圖的格式,須設(shè)置為PixelFormat8bppIndexed(8bit索引位圖)。

      dithertype參數(shù)指定抖動(dòng)顏色采用的方法,須設(shè)置為DitherTypeSolid(抖動(dòng)到實(shí)體顏色)。

      palettetype參數(shù)指定灰度位圖使用的顏色表(在GDI+中稱為調(diào)色板)的類型,須設(shè)置為PaletteTypeCustom(自定義調(diào)色板)。

      palette為指向灰度位圖的顏色表數(shù)據(jù)結(jié)構(gòu)指針,調(diào)用這個(gè)函數(shù)的關(guān)鍵一步是構(gòu)造顏色表。如何構(gòu)造灰度圖像的顏色表請(qǐng)參考下一節(jié)中的核心代碼。

      alphaThresholdPercent參數(shù)和像素透明化處理有關(guān),一般轉(zhuǎn)換不涉及像素透明化處理,須設(shè)置為0。

      4 核心代碼

      代碼使用visual C++開發(fā),因?yàn)閮H為演示代碼,其他不重要的代碼都已經(jīng)略去。

      void GrayScale(Bitmap* bmp){

      void* p=malloc(sizeof(Gdiplus::ColorPalette)+255*sizeof(ARGB));

      Gdiplus::ColorPalette*cpal=(Gdiplus::ColorPalette*)p;

      for(int i=0;i<256;i++)cpal->Entries[i]=Color::MakeARGB(0,i,i,i);//構(gòu)造顏色表

      cpal->Flags=PaletteFlagsGrayScale;

      cpal->Count=256;

      bmp->ConvertFormat(PixelFormat8bppIndexed,DitherTypeSolid,PaletteTypeCustom,cpal,0);

      free(p);}

      顏色表數(shù)據(jù)結(jié)構(gòu)包含2個(gè)部分:頭和數(shù)據(jù)。頭部有2個(gè)字段Flags和Count。Flags設(shè)置為PaletteFlagsGrayScale,表示顏色表是灰度位圖顏色表。Count設(shè)置為256,表示有256中灰度顏色。數(shù)據(jù)部分是256種灰度顏色,從(0,0,0)一直到(255,255,255)。要注意的是,在標(biāo)準(zhǔn)顏色表中,每種顏色占用32 bit空間,所以要通過(guò)宏MakeARGB擴(kuò)充到32 bit。

      5 結(jié)語(yǔ)

      通過(guò)GDI+將全彩色圖像轉(zhuǎn)化為灰度圖像是非常簡(jiǎn)單的,無(wú)須和位圖格式細(xì)節(jié)打交道,也無(wú)須直接用公式進(jìn)行色彩轉(zhuǎn)換,非常簡(jiǎn)便高效。

      參考文獻(xiàn)

      [1]周鳴揚(yáng),趙景亮.精通GDI+編程[M].北京:清華大學(xué)出版社,2004.

      [2]Ivor Horton.Visual C++2010入門經(jīng)典(第5版)[M].北京:清華大學(xué)出版社,2010.

      猜你喜歡
      轉(zhuǎn)換
      初中語(yǔ)文課堂如何做好教師角色的轉(zhuǎn)換
      淺析生態(tài)城市指標(biāo)在規(guī)劃設(shè)計(jì)中的轉(zhuǎn)換
      變式教學(xué)法在高中數(shù)學(xué)中的應(yīng)用
      如何構(gòu)建新型的師生關(guān)系
      自動(dòng)溫度補(bǔ)償原理與調(diào)節(jié)方法
      科技視界(2016年26期)2016-12-17 17:26:26
      淺議長(zhǎng)期股權(quán)投資核算方法的轉(zhuǎn)換
      對(duì)當(dāng)代書法藝術(shù)性的思考
      大數(shù)據(jù)時(shí)代檔案管理模式的轉(zhuǎn)換與創(chuàng)新
      資治文摘(2016年7期)2016-11-23 02:29:01
      論英漢語(yǔ)翻譯中語(yǔ)內(nèi)翻譯向語(yǔ)際翻譯的轉(zhuǎn)換
      淺談平面圖與立體圖的思維培養(yǎng)
      人間(2016年28期)2016-11-10 00:10:48
      西和县| 南皮县| 伊宁县| 永善县| 汾西县| 盖州市| 三门县| 革吉县| 西平县| 孙吴县| 曲阜市| 桑植县| 万盛区| 长阳| 上饶县| 深泽县| 武功县| 衡东县| 天水市| 方城县| 平阳县| 施秉县| 得荣县| 高州市| 东光县| 康马县| 永新县| 永宁县| 台东市| 常山县| 宣恩县| 彭州市| 横峰县| 湘乡市| 兴山县| 长武县| 夏邑县| 城市| 高要市| 盐源县| 镇沅|