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-

转载于:https://www.cnblogs.com/qingchen1984/p/4992548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值