專利名稱:一種圖像像素處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖像顯示技術(shù)領(lǐng)域,特別涉及一種圖像像素處理方法。
背景技術(shù):
隨著計算機應(yīng)用的普及,計算機繪圖及圖像處理越來越普遍,涉及到美術(shù)、設(shè)計、圖像處理,圖形填充,而對像素的處理是圖像處理中的一個重要環(huán)節(jié),如對某部分區(qū)域進行圖像處理變化顏色、填充顏色、蛻化、灰度變換等。在現(xiàn)有的圖像處理中,主要是采用GDI(Gr即hics Device Interface,圖形設(shè)備接口 )中Bitm即(位像)的GetPixel函數(shù)和SetPixel函數(shù)方法訪問,這兩種方法都是直接操作顯卡,消耗很多的CPU資源,導(dǎo)致獲取速度比較慢。而且隨著處理的圖片越來越大,處理的效率和速度要求也越來越高,經(jīng)過程序測試,如果處理一個1280X 1024大小的圖片的所有像素需要的時間大概是4000ms,大概4秒,如果對比較大的圖片及高分辨率的屏幕進行像素處理,則會更加慢。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點和不足,提供了一種圖像像素處理方法,簡單、準確的完成對對象的操作,還具有占用CPU資源少、速度快、軟件兼容性好的優(yōu)點。
本發(fā)明目的是通過下述技術(shù)方案實現(xiàn)的,一種圖像像素處理方法,如圖l所示,包括以下步驟 Sl、創(chuàng)建一個可讀寫的位圖內(nèi)存;
S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中; S3、獲取位圖內(nèi)存中位圖的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中,獲取圖片對象數(shù)據(jù)的指針; S4、循環(huán)掃描查找需處理的區(qū)域內(nèi)所有像素,通過圖片對象數(shù)據(jù)的指針獲取不同位置像素的像素值和/或修改像素的像素值,完成區(qū)域內(nèi)所有像素的處理。
為更好的實現(xiàn)本發(fā)明,所述圖像像素處理方法還包括 S5、通過BitBlt函數(shù)把處理后的區(qū)域畫到圖片對應(yīng)的位置上,完成圖片內(nèi)該區(qū)域像素的變換。
所述圖像像素處理方法還可包括 S5、判斷是否還需對圖片的其它區(qū)域像素進行處理,若是,則返回步驟S4,否則完成圖片像素的處理。
所述步驟S1、創(chuàng)建一個可讀寫的位圖內(nèi)存,具體包括以下步驟 Sl. 1、采用CreateCompatibleDC函數(shù)創(chuàng)建一個兼容的內(nèi)存DC ; Sl. 2、采用CreateDIBSection函數(shù)創(chuàng)建一個可直接讀寫的位片; S1.3、采用SelectObject函數(shù)把位片放到步驟Sl. 1創(chuàng)建的內(nèi)存DC中。 所述步驟Sl. 2中創(chuàng)建的可直接讀寫的位片面積小于或等于需處理的圖片面積。
所述步驟S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中,具體包括以下步驟
S2. 1、根據(jù)窗口句柄,采用GetDC函數(shù)獲取屏幕DC ; S2. 2、采用BitBlt函數(shù)把步驟S2. 1獲取到的屏幕DC中屏幕內(nèi)容部分或全部畫到步驟Sl可讀寫的位圖內(nèi)存中。 優(yōu)選的,若不需對圖片的邊緣像素進行處理,或?qū)D片邊緣像素的處理但不涉及圖片外背景的像素值,則所述步驟S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中,還可以是指采用Drawlmage函數(shù)把圖片內(nèi)容部分或全部畫到步驟SI可讀寫的位圖內(nèi)存中。
所述步驟S3具體包括以下步驟 S3. 1、采用GetObject函數(shù)獲取位圖相關(guān)的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中;所述位圖相關(guān)的數(shù)據(jù)信息,具體是指圖片高度和寬度; S3.2、根據(jù)結(jié)構(gòu)體BITMAP中的位圖內(nèi)存指針參數(shù),獲取圖片對象數(shù)據(jù)的指針,直接讀取內(nèi)存,通過指針來計算不同位置像素在內(nèi)存中的位置。
所述步驟S4具體包括以下步驟 S4. 1、讀取需要處理的區(qū)域中各頂點坐標,計算區(qū)域內(nèi)各像素的坐標; S4.2、根據(jù)需處理像素的像素坐標從圖片對象數(shù)據(jù)的指針中獲取該位置的像素值
和/或者修改其像素值,完成本位置坐標像素的處理操作; S4. 3、判斷本區(qū)域內(nèi)的所有像素是否已完成處理,若是,則結(jié)束本區(qū)域像素處理操作;否則,循環(huán)查找本區(qū)域內(nèi)下一像素的坐標,并返回步驟S4.2。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點與有益效果 第一、占用CPU資源少、處理速度快由于主要的處理是在內(nèi)存中進行,可以有效的減少CPU資源的消耗,提高對圖像及屏幕像素操作處理的速度和效率,解決處理大圖片及高分辨率屏幕需要長時間等待的問題。在同等環(huán)境下,經(jīng)過測試,處理一個1280X1024大小的圖片或屏幕的所有像素需要的時間大概是300ms,速度提高了 13倍左右,省了很多的計算時間。 第二、提高軟件適用的兼容性由于主要的處理是在內(nèi)存中進行,而不是在顯卡中
進行,因此可以有效的減少CPU資源的消耗,也提高了軟件的兼容性、易用性。 第三、延長顯卡的使用壽命由于圖像處理軟件中需要進行圖片的像素變色、蛻
化、灰度變換和圖片外背景像素值修改(如直接把帶透明度的筆跡畫到屏幕上)等處理,而
應(yīng)用現(xiàn)有的方法處理速度很慢,應(yīng)用本發(fā)明方法,對圖像及屏幕像素的操作處理,主要在內(nèi)
存中進行,避免對顯卡進行頻繁的切換,大大的延長顯卡的使用壽命。
圖1是本發(fā)明一種圖像像素處理方法的流程圖; 圖2是本實施例一應(yīng)用本發(fā)明圖像像素處理方法的流程圖; 圖3是本實施例二應(yīng)用本發(fā)明圖像像素處理方法的流程圖。
具體實施例方式
下面結(jié)合實施例及附圖,對本發(fā)明作進一步地詳細說明,但本發(fā)明的實施方式不限于此。
實施例一 以本實施例一為例,具體描述用戶應(yīng)用本發(fā)明方法在Windows操作系統(tǒng)的GDI中對圖片像素進行處理,完成對圖片某部分進行的透明變換、灰度變換或修改顏色值等操作。如圖2所示,具體步驟如下 Sl、采用CreateCompatibleDC函數(shù)創(chuàng)建一個兼容的內(nèi)存DC,命名為hMenDC,本兼容DC主要用來獲取整個圖片的像素值。 S2、根據(jù)目前圖片的大小,采用CreateDIBSection函數(shù)創(chuàng)建一張圖片大小的可直接讀寫的位片,命名為hBitm即(根據(jù)修改的需要創(chuàng)建的位圖,其面積亦可比圖片的實際面積小),本位圖指針用于存放整張圖片像素的內(nèi)存。 S3、采用Select0bject函數(shù)把位片hBitm即存放到步驟Sl創(chuàng)建的hMenDC上,準備獲取圖片像素數(shù)據(jù)。 S4、采用DrawImage函數(shù)把圖片內(nèi)容畫到步驟S3的hMenDC上,即把圖片的全部像素數(shù)據(jù)裝入到可以讀寫的位圖內(nèi)存hBitm即中(若步驟S2中創(chuàng)建的位圖其面積比實際面積小,則只把圖片的部分像素數(shù)據(jù)裝入到位圖內(nèi)存hBitm即中)。 S5、采用GetObject函數(shù)獲取位片hBitm即相關(guān)的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中,命名為hBit ;其中相關(guān)的數(shù)據(jù)信息具體是指圖片高度、寬度等。
S6、根據(jù)hBit獲取圖片對象數(shù)據(jù)的指針pBmpstr,直接讀取內(nèi)存,把獲取的全屏幕像素數(shù)據(jù)轉(zhuǎn)為可以讀取的指針,通過指針來計算圖片不同位置的像素在內(nèi)存中的位置。
S7、進入?yún)^(qū)域像素處理階段,根據(jù)需處理像素的像素坐標,從圖片對象數(shù)據(jù)的指針中獲取該位置的像素值和/或修改其像素值,完成本位置坐標像素的處理操作;循環(huán)掃描完成區(qū)域內(nèi)的所有像素的處理。具體為(循環(huán)方式有多種,下面只是其中的一種,本發(fā)明亦可用其它的循環(huán)方式) S7. 1、假設(shè)需要處理的區(qū)域矩形為(xl,yl,x2,y2),其中(xl,yl)為矩形左上角頂點坐標,(x2, y2)為矩形右下角頂點坐標;設(shè)處理的像素坐標為(x, y),起始點為x = xl, y=yl ; S7. 2、判斷當前像素坐標y值是否小于或等于y2,若是則進入S7. 3 ;否則進入S8 ;
S7.3、判斷當前像素坐標x值是否小于或等于x2,若是則進入S7.4;否則y二y+l,并返回S7. 2 ; S7. 4、根據(jù)需處理像素的坐標,從圖片對象數(shù)據(jù)的指針pBmpstr中獲取像素值和/或修改其像素值,如進行變換顏色、透明度、灰度變換等操作,完成本位置坐標像素的處理操作; S7. 5、進入下一像素的處理,即x = x+l,并返回S7. 3。 S8、判斷是否還需對圖片的其它區(qū)域像素進行處理,若是,則返回步驟S7,否則進入步驟S9。 S9、通過BitBlt函數(shù)把該矩形區(qū)域畫到圖片對應(yīng)的位置上,即完成了圖片區(qū)域像
素的變換。 實施例二 在Windows操作系統(tǒng)的GDI+中,當對圖片邊緣像素進行處理時,如圖片邊緣像素透明后需要與圖片外的背景像素值融合,因此對圖片邊緣像素的部分處理操作還將涉及圖4/4頁
片外背景的像素值,下面通過本實施例來描述應(yīng)用本發(fā)明方法完成上述圖片操作的處理。 如圖3所示,具體步驟如下 Sl、采用CreateCompatibleDC函數(shù)創(chuàng)建一個兼容的內(nèi)存DC,命名為hMenDC,本兼 容DC主要用來獲取整個屏幕的像素值。 S2、根據(jù)目前屏幕的大小,采用CreateDIBSection函數(shù)創(chuàng)建一個屏幕大小的可直 接讀寫的位片,命名為hBitm即,本位圖指針用于存放全屏幕像素的內(nèi)存(創(chuàng)建的位 圖,其面積亦可比屏幕面積小,如只是屏幕面積的一半,并用于存放1/2屏幕像素的內(nèi)存)。
S3、采用SelectObject函數(shù)把位片hBitmap放到內(nèi)存設(shè)備環(huán)境hMenDC上,準 備取屏幕像素數(shù)據(jù)。 S4、根據(jù)窗口句柄(HWND),采用GetDC函數(shù)獲取屏幕DC,命名為hScreenDC ;獲取 全屏幕的內(nèi)容,以提供對不同位置像素點的處理。 S5、采用BitBlt函數(shù)把步驟S4中的圖像內(nèi)容hScreenDC畫到內(nèi)存DChMenDC上, 即把全屏幕的像素數(shù)據(jù)裝入到可以讀寫的位圖hBitm即中(若步驟S2中創(chuàng)建的位圖,其面 積比屏幕面積小,如只是屏幕面積的一半,則只裝入全屏幕像素數(shù)據(jù)的一半到位圖hBitm即 中即可)。 S6、根據(jù)獲取的位片hBitm即,采用GetObject函數(shù)獲取位片hBitm即相 關(guān)的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中,命名為hBit,相關(guān)的數(shù)據(jù)信息具體是指圖片 高度、寬度等,獲取的圖片高度、寬度是用于后續(xù)計算像素的位移。 S7、根據(jù)hBit獲取圖片對象數(shù)據(jù)的指針pBmpstr,直接讀取內(nèi)存,把獲取的全屏幕
像素數(shù)據(jù)轉(zhuǎn)為可以讀取的指針,通過指針來計算不同位置像素在內(nèi)存中的位置。 S8、根據(jù)需要處理的區(qū)域中頂點坐標計算區(qū)域內(nèi)的各像素坐標,根據(jù)需處理像素
的像素坐標從圖片對象數(shù)據(jù)的指針pBmpstr中獲取該位置的像素值和/或修改其像素值,
如變換顏色、透明度、灰度變換等操作,完成本位置坐標像素的處理操作;循環(huán)掃描完成區(qū)
域內(nèi)的所有像素的處理。 S9、判斷是否還需對圖片的其它區(qū)域像素進行處理,若是,則返回步驟S8,否則完 成圖片像素的處理。 S10、通過BitBlt函數(shù)把該區(qū)域畫到屏幕對應(yīng)的位置上,即完成了屏幕區(qū)域像素 的變換。 上述實施例為本發(fā)明較佳的實施方式,但本發(fā)明的實施方式并不受所述實施例的 限制,其他的任何未背離本發(fā)明的精神實質(zhì)與原理下所作的改變、修飾、替代、組合、簡化, 均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
一種圖像像素處理方法,其特征在于,包括以下步驟S1、創(chuàng)建一個可讀寫的位圖內(nèi)存;S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中;S3、獲取位圖內(nèi)存中位圖的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中,獲取圖片對象數(shù)據(jù)的指針;S4、循環(huán)掃描查找需處理的區(qū)域內(nèi)所有像素,通過圖片對象數(shù)據(jù)的指針獲取不同位置像素的像素值和/或修改像素的像素值,完成區(qū)域內(nèi)所有像素的處理。
2. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,還包括,55、 判斷是否還需對圖片的其它區(qū)域像素進行處理,若是,則返回步驟S4,否則完成圖片像素的處理。
3. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,還包括S5、通過BitBlt函數(shù)把處理后的區(qū)域畫到圖片對應(yīng)的位置上,完成圖片內(nèi)該區(qū)域像素的變換。
4. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,所述步驟S1、創(chuàng)建一個可讀寫的位圖內(nèi)存,具體包括以下步驟Sl. 1、采用CreateCompatibleDC函數(shù)創(chuàng)建一個兼容的內(nèi)存DC ;Sl. 2、采用CreateDIBSection函數(shù)創(chuàng)建一個可直接讀寫的位片;51. 3、采用SelectObject函數(shù)把位片放到步驟Sl. 1創(chuàng)建的內(nèi)存DC中。
5. 根據(jù)權(quán)利要求4所述一種圖像像素處理方法,其特征在于,所述步驟Sl. 2中創(chuàng)建的可直接讀寫的位片面積小于或等于需處理的圖片面積。
6. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,所述步驟S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中,具體包括以下步驟52. 1、根據(jù)窗口句柄,采用GetDC函數(shù)獲取屏幕DC ;52. 2、采用BitBlt函數(shù)把步驟S2. 1獲取到的屏幕DC中屏幕內(nèi)容部分或全部畫到步驟Sl可讀寫的位圖內(nèi)存中。
7. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,所述步驟S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中,具體是指采用DrawImage函數(shù)把圖片內(nèi)容部分或全部畫到步驟Sl可讀寫的位圖內(nèi)存中。
8. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,所述步驟S3具體包括以下步驟53. 1、采用GetObject函數(shù)獲取位圖相關(guān)的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中;53. 2、根據(jù)結(jié)構(gòu)體BITMAP中的位圖內(nèi)存指針參數(shù),獲取圖片對象數(shù)據(jù)的指針。
9. 根據(jù)權(quán)利要求8所述一種圖像像素處理方法,其特征在于,所述位圖相關(guān)的數(shù)據(jù)信息,具體是指圖片高度和寬度。
10. 根據(jù)權(quán)利要求1所述一種圖像像素處理方法,其特征在于,所述步驟S4具體包括以下步驟,54. 1、讀取需要處理的區(qū)域中各頂點坐標,計算區(qū)域內(nèi)各像素的坐標;S4. 2、根據(jù)需處理像素的像素坐標從圖片對象數(shù)據(jù)的指針中獲取該位置的像素值和/或修改其像素值,完成本位置坐標像素的處理操作;S4.3、判斷本區(qū)域內(nèi)的所有像素是否已完成處理,若是,則結(jié)束本區(qū)域像素處理操作;否則,循環(huán)查找本區(qū)域內(nèi)下一像素的坐標,并返回步驟S4.2。
全文摘要
本發(fā)明公開了一種圖像像素處理方法,包括以下步驟S1、創(chuàng)建一個可讀寫的位圖內(nèi)存;S2、把圖片像素數(shù)據(jù)寫入位圖內(nèi)存中;S3、獲取位圖內(nèi)存中位圖的數(shù)據(jù)信息,并寫入結(jié)構(gòu)體BITMAP對象中,獲取圖片對象數(shù)據(jù)的指針;S4、循環(huán)掃描查找需處理的區(qū)域內(nèi)所有像素,通過圖片對象數(shù)據(jù)的指針獲取不同位置像素的像素值和/或修改像素的像素值,完成區(qū)域內(nèi)所有像素的處理。本發(fā)明方法具有占用CUP資源少、速度快、軟件兼容性好等優(yōu)點。
文檔編號G06T1/00GK101763625SQ20091021415
公開日2010年6月30日 申請日期2009年12月24日 優(yōu)先權(quán)日2009年12月24日
發(fā)明者陳先志 申請人:廣東威創(chuàng)視訊科技股份有限公司