Android中如何將Bitmap byte裸數據轉換成Bitmap圖片int數據


Android中如何將Bitmap byte裸數據轉換成Bitmap圖片int數據
2014-06-11 10:45:14   閱讀375次

我們在JNI中處理得到的BMP圖片Raw數據,我們應該如何轉換為Bitmap呢?

由於得到的數據是unsigned char *類型的數據,而對於Bitmap的類來說,其類方法里面:

 

 

1
2
public  static  Bitmap createBitmap( int  colors[],  int  offset,  int  stride,
             int  width,  int  height, Config config)

   

 

要求傳入的是int *數據,這里我們就需要將unsigned char *數據轉換為RGB的int值了。

java里面的方法可以采取如下代碼:

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public  static  int  convertByteToInt( byte  data){
         
         int  heightBit = ( int ) ((data>> 4 ) &  0x0F );
         int  lowBit = ( int ) ( 0x0F  & data);
 
         return  heightBit *  16  + lowBit;
     }
     
     public  static  int [] convertByteToColor( byte [] data){
         int  size = data.length;
         if  (size ==  0 ){
             return  null ;
         }
         
         int  arg =  0 ;
         if  (size %  3  !=  0 ){
             arg =  1 ;
         }
         
         int  []color =  new  int [size /  3  + arg];
         int  red, green, blue;
         
         if  (arg ==  0 ){
             for ( int  i =  0 ; i < color.length; ++i){
                 red = convertByteToInt(data[i *  3 ]);
                 green = convertByteToInt(data[i *  3  1 ]);
                 blue = convertByteToInt(data[i *  3  2 ]);   
                                 
                 color[i] = (red <<  16 ) | (green <<  8 ) | blue |  0xFF000000 ;  
             }
         } else {
             for ( int  i =  0 ; i < color.length -  1 ; ++i){
                 red = convertByteToInt(data[i *  3 ]);
                 green = convertByteToInt(data[i *  3  1 ]);
                 blue = convertByteToInt(data[i *  3  2 ]);   
                 color[i] = (red <<  16 ) | (green <<  8 ) | blue |  0xFF000000 ;  
             }
             
             color[color.length -  1 ] =  0xFF000000 ;
         }
     
         return  color;
     }
     Bitmap decodeFrameToBitmap( byte [] frame) 
     {
         int  []colors = convertByteToColor(frame);
         if  (colors ==  null ){
             return  null ;
         }
         Bitmap bmp = Bitmap.createBitmap(colors,  0 1280 1280 720 ,Bitmap.Config.ARGB_8888);                       
         return  bmp;
     }

 

代碼不解釋,有問題博客提一下,會解答。

-END-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM