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, 012801280720,Bitmap.Config.ARGB_8888);                       
        return bmp;
    }

代码不解释,有问题博客提一下,会解答。

-END-

Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据的更多相关文章

  1. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  2. 将undefault和null的数据转换成bool类型的数据 使用!!

    <script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...

  3. C# byte数组转成Bitmap对象

    方法一: /// <summary> /// 将数组转换成彩色图片 /// </summary> /// <param name="rawValues" ...

  4. 省市县从数据库读出来的list数据转换成json格式的数据

    一,数据源 1.1,数据库查出来的数据是 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文 ...

  5. python将json格式的数据转换成文本格式的数据或sql文件

    python如何将json格式的数据快速的转化成指定格式的数据呢?或者转换成sql文件? 下面的例子是将json格式的数据准换成以#_#分割的文本数据,也可用于生成sql文件. [root@bogon ...

  6. 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式

    断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...

  7. Android中你应该知道的设计模式

    建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...

  8. MD5+DES在C#.NET与Java/Android中的加解密使用

    一.背景后台(C#.NET)使用一个MD5+DES的加解密算法,查了下,很多网友都使用了这个算法.在Android里,也需要这个算法,如何把这个加解密算法切换成Java版,成了难题.毕竟好久没涉及到这 ...

  9. android中常见的设计模式有哪些?

    建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...

随机推荐

  1. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

  2. 转Delphi中Create(nil),Create(self),Create(Application)区别

    Create(nil);//需要自己释放 Create(Self);//当Self释放时自动触发释放 Create(Application);//当Application释放时自动释放 Create( ...

  3. MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用

    上节通过一系列重构 简单的项目就实现了 不过还有些EF的功能没有讲 这节就通过项目 讲讲EF其他的功能与技巧 一.直接执行SQL语句 通常来讲 EF 不用写SQL语句的  但是 在有些场合  比如对生 ...

  4. $addToSet $push

    结果:

  5. 团队项目(spring会议)

    [例会时间]2014/4/11 [例会地点]一教213课堂上 [例会形式]小组讨论 [例会主持]马翔 [例会记录]兰梦 在这次会议上,我们针对我们的项目进行了分割,并分别认领各自的任务 下面是任务的认 ...

  6. java实现UDP聊天---转载

    import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...

  7. Openjudge-计算概论(A)-能被3,5,7整除的数

    描述: 输入一个整数,判断它能否被3,5,7整除,并输出以下信息:1.能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格):2.能被其中两个数整除(输出两个数,小的在前,大的在后.例如:3 ...

  8. redis数据类型:sorted sets类型及操作

    sorted sets类型及操作: sorted set是set的一个升级版本,它是在set的基础上增加了一个顺序 属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会 自动重新按新的值 ...

  9. mysql备份并自动压缩命令

    #! /bin/bash mysqldump -uroot -p'password' databasename | gzip > /home/backup/database_`date +%Y% ...

  10. iOS 时间戳的问题

    - (NSString *)timeWithTimeIntervalString:(NSString *)timeString { // 格式化时间 NSDateFormatter* formatte ...