一種將Bitmap轉成YUV格式的文件的方法
【專利摘要】本發(fā)明公開了一種將Bitmap轉成YUV格式的文件的方法,包括下述步驟:S1、將RGB格式的Bitmap讀到內存中;S2、申請一塊內存,此塊內存大小是該Bitmap經過無損壓縮后再解碼后的大小,并且設置YUV的格式,利用scalado庫的caps_createImage創(chuàng)建一個內存大小的對象,此對象用于創(chuàng)建session,caps_newSessionWithRaw用于后面對此內存進行處理的關聯(lián)對象;S3、再創(chuàng)建一個Bitmap尺寸大小的BUF,此BUF用于保存轉換YUV后的BUF的數據;S4、caps_renderAsRawToBuffer通過掃描每行Session中的數據到步驟S3創(chuàng)建的BUF數據中,獲得到轉換YUV后的BUF數據;S5、把此BUF寫入到文件當中,得到轉成YUV的數據。本發(fā)明YUV與RGB互相轉換簡單、高效;比較方便實現任意格式的YUV的轉換。另外,本發(fā)明對于多種YUV格式的設置簡單,代碼量小而且簡單。
【專利說明】—種將Bitmap轉成YUV格式的文件的方法
【技術領域】
[0001]本發(fā)明涉及文件色彩處理的【技術領域】,特別涉及一種將Bitmap轉成YUV格式的文件的方法。
【背景技術】
[0002]位圖文件(Bitmap),擴展名可以是.bmp或者.dib。位圖是Windows標準格式圖形文件,它將圖像定義為由點(像素)組成,每個點可以由多種色彩表示,包括2、4、8、16、24和32位色彩。RGB是位圖顏色的一種編碼方法,用紅、綠、藍三原色的光學強度來表示一種顏色。
[0003]YUV主要用于優(yōu)化彩色視頻信號的傳輸,與RGB視頻信號傳輸相比,它最大的優(yōu)點在于只需占用極少的頻寬(RGB要求三個獨立的視頻信號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“11”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色?!傲炼取笔峭高^RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起?!吧取眲t定義了顏色的兩個方面一色調與飽和度,分別用Cr和Cb來表示。其中,Cr反映了 RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而Cb反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差
巳
[0004]目前將RGB轉YUV需要對每個像素的數據進行逐一的處理,處理的數據量很大,算法也比較復雜,而且代碼量也大,效率不高.而且針對不同的YUV的格式,需要同時調整算法,因為YUV格式的不同,導致RGB轉換時數據處理也有不同,所以比較繁瑣。
【發(fā)明內容】
[0005]本發(fā)明的目的在于克服現有技術的缺點與不足,提供一種利用Scalado庫將Bitmap轉成YUV格式的文件的方法。
[0006]本發(fā)明的目的通過下述技術方案實現:
[0007]本發(fā)明一種將Bitmap轉成YUV格式的文件的方法,包括下述步驟:
[0008]S1、將RGB格式的Bi tmap讀到內存中;
[0009]S2、申請一塊內存,此塊內存大小是該Bitmap (位圖)經過無損壓縮后再解碼后的大小,這樣Bitmap就相當于存到內存中了,并且設置YUV的格式,利用scalado庫的caps_createlmage創(chuàng)建一個內存大小的對象,此對象用于創(chuàng)建session, caps_newSessionWithRaw用于后面對此內存進行處理的關聯(lián)對象;
[0010]S3、再創(chuàng)建一個Bitmap尺寸大小的BUF,此BUF用于保存轉換YUV后的BUF的數據;
[0011]S4、caps_renderAsRawToBuffer通過掃描每行Session中的數據到步驟S3創(chuàng)建的BUF數據中,獲得到轉換YUV后的BUF數據;
[0012]S5、把此BUF寫入到文件當中,得到轉成YUV的數據。[0013]優(yōu)選的,步驟S2中,申請一個Bitmap讀到內存中的BUF尺寸大小的內存處理方法如下:
[0014]先創(chuàng)建一個字節(jié)流os,再把Bitmap無損壓縮到該字節(jié)流中,
[0015]再把此字節(jié)流通過os.toByteArray O轉換成字節(jié)數組,從而完成把Bitmap的數據讀到字節(jié)數組中,此處的數據是RGBA8888格式的數據。
[0016]優(yōu)選的,步驟S2中,所述設置YUV的格式具體為:在創(chuàng)建SESSION時設置CM_YUV422_UY1VY2,這樣Scalado通過逐行掃描,并轉換成YUV格式。
[0017]優(yōu)選的,步驟S2中,session是用于后續(xù)對該內存的操作,類似于獲取到一個句柄的作用。
[0018]優(yōu)選的,步驟S3中,將數據轉換成YUV格式的方法如下:
[0019]通過每行掃描內存塊,來對每行的數據逐行進行YUV的轉換,通過借用Scalado的接口來實現,每行的數據中的像素進行YUV的轉換。
[0020]本發(fā)明相對于現有技術具有如下的優(yōu)點及效果:
[0021]1、本發(fā)明YUV與RGB互相轉換簡單、高效;比較方便實現任意格式的YUV的轉換。
[0022]2.本發(fā)明對于多種YUV格式的設置簡單,代碼量小而且簡單。
[0023]3.本發(fā)明比對每個像素的處理要簡潔,不易出錯,效率也高。
【專利附圖】
【附圖說明】
[0024]圖1是本發(fā)明的流程圖。
【具體實施方式】
[0025]下面結合實施例及附圖對本發(fā)明作進一步詳細的描述,但本發(fā)明的實施方式不限于此。
[0026]實施例
[0027]如圖1所示,本實施例一種將Bitmap轉成YUV格式的文件的方法,包括下述步驟:
[0028]1、將Bitmap讀到內存中,因為Bitmap每個像素都是RGB格式的;
[0029]2、申請一塊內存,此塊內存大小是該Bitmap (位圖)經過無損壓縮后再解碼后的大小,這樣Bitmap就相當于存到內存中了,并且設置YUV的格式,利用scalado庫的caps_createlmage創(chuàng)建一個內存大小的對象,此對象用于創(chuàng)建session, caps_newSessionffithRaw用于后面對此內存進行處理的關聯(lián)對象;此session主要是方便用于后續(xù)對該內存的操作,類似于獲取到一個句柄的作用。
[0030]其中,將Bitmap讀到內存中實現方式如下:
[0031]先創(chuàng)建一個字節(jié)流os,再把Bitmap無損壓縮到該字節(jié)流中,
[0032]bitmap, compress(Bitmap.CompressFormat.JPEG, 100, os);
[0033]再把此字節(jié)流通過os.toByteArray O轉換成字節(jié)數組,這樣就可以把Bitmap的數據讀到字節(jié)數組中,注意此處的數據是RGBA8888格式的。
[0034]YUV的設置:我們只需要設置CM_YUV422_UY1VY2,在創(chuàng)建SESSION時設置進去,這樣Scalado會通過逐行掃描,并轉換成YUV格式的。這也是本申請的優(yōu)勢;簡單而且有很多種YUV的格式,例如CM_YUV422P等等。[0035]3、再創(chuàng)建一個Bitmap尺寸大小的BUF,此BUF主要用于保存轉換YUV后的BUF的數據;該步驟中再創(chuàng)建一個Bitmap尺寸大小的BUF的方法和步驟2中所采用的方法相同。
[0036]將數據轉換成YUV格式的具體的過程是:通過每行掃描內存塊,來對每行的數據逐行進行YUV的轉換,我們通過借用Scalado的接口來實現;每行的數據中的像素進行YUV的轉換;利用其封裝簡單,高效。
[0037]4、通過掃描每行Session中的數據到我們第3步創(chuàng)建的BUF數據中,即可獲得到轉換YUV后的BUF數據;
[0038]5.把此BUF寫入到文件當中,即可得到轉成YUV的數據。
[0039]上述實施例為本發(fā)明較佳的實施方式,但本發(fā)明的實施方式并不受上述實施例的限制,其他的任何未背離本發(fā)明的精神實質與原理下所作的改變、修飾、替代、組合、簡化,均應為等效的置換方式,都包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種將Bitmap轉成YUV格式的文件的方法,其特征在于,包括下述步驟: 51、將RGB格式的Bitmap讀到內存中; 52、申請一塊內存,此塊內存大小是該Bitmap經過無損壓縮后再解碼后的大小,這樣Bitmap就相當于存到內存中了,并且設置YUV的格式,利用scalado庫的caps_createlmage創(chuàng)建一個內存大小的對象,此對象用于創(chuàng)建session, caps_newSessionffithRaw用于后面對此內存進行處理的關聯(lián)對象; 53、再創(chuàng)建一個Bitmap尺寸大小的BUF,此BUF用于保存轉換YUV后的BUF的數據; 54、caps_renderAsRawToBuffer通過掃描每行Session中的數據到步驟S3創(chuàng)建的BUF數據中,獲得到轉換YUV后的BUF數據; 55、把此BUF寫入到文件當中,得到轉成YUV的數據。
2.根據權利要求1所述的將Bitmap轉成YUV格式的文件的方法,其特征在于,步驟S2中,申請一個Bitmap讀到內存中的BUF尺寸大小的內存處理方法如下: 先創(chuàng)建一個字節(jié)流os,再把Bitmap無損壓縮到該字節(jié)流中, 再把此字節(jié)流通過os.toByteArray ()轉換成字節(jié)數組,從將Bitmap的數據讀到字節(jié)數組中,此處的數據是RGBA8888格式的數據。
3.根據權利要求1所述的將Bitmap轉成YUV格式的文件的方法,其特征在于,步驟S2中,所述設置YUV的格式具體為:在創(chuàng)建SESSION時設置CM_YUV422_UY1VY2,這樣Scalado通過逐行掃描,并轉換成YUV格式。
4.根據權利要求1所述的將Bitmap轉成YUV格式的文件的方法,其特征在于,步驟S2中,Session是用于后續(xù)對該內存的操作,類似于獲取到一個句柄的作用。
5.根據權利要求1所述的將Bitmap轉成YUV格式的文件的方法,其特征在于,步驟S3中,將數據轉換成YUV格式的方法如下: 通過每行掃描內存塊,來對每行的數據逐行進行YUV的轉換,通過借用Scalado的接口來實現,每行的數據中的像素進行YUV的轉換。
【文檔編號】H04N9/64GK103546731SQ201310445610
【公開日】2014年1月29日 申請日期:2013年9月26日 優(yōu)先權日:2013年9月26日
【發(fā)明者】李小朋 申請人:廣東歐珀移動通信有限公司