Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据

转自:http://blog.mn886.net/chenjianhua/show/e4d3a52afc2c468c9e6cd437afb99c5f/index.html


我们在JNI中处理得到的BMP图片Raw数据,我们应该如何转换为Bitmap呢?

由于得到的数据是unsigned char *类型的数据,而对于Bitmap的类来说,其类方法里面:



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

   


要求传入的是int *数据,这里我们就需要将unsigned char *数据转换为RGB的int值了。

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

   

    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;
     }



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值