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-

时间: 2024-11-03 14:34:09

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

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

<script> var o={}; var a=null; console.info(!!o.name);</script> 输出false 此方法是将undefault和null的数据转换成bool类型的数据. var model = avalon.define({ $id: 'model',defaultvalue {}, }); <span ms-if="!!defaultvalue .cost" >测试</span>

C# byte数组转成Bitmap对象

方法一: /// <summary> /// 将数组转换成彩色图片 /// </summary> /// <param name="rawValues">图像的byte数组</param> /// <param name="width">图像的宽</param> /// <param name="height">图像的高</param> /// <

android开发:把一个byte数组转换成wav音频文件,并且播放

============问题描述============ 如题,byte数组转换成wav音频文件,并且播放,下面代码能生成data/data/com.example.playwav/cache/temp.wav 但是在播放的时候报异常. 我把代码和Log贴在下面了. 我分析,原因应该是wav文件格式的编解码问题,不能这么随随便便把任意的一个byte数组就转化为了wav 希望了解wav编解码开发的童鞋给点解决办法 byte[] a = { 52, 51, 48, 28, 58, 64, 98,-1

android中一个应用程序启动另外一个应用程序,并传递数据。

一.android一个应用程序启动了另外一个应用程序时候有2中方法. 第一种是知道了调用的app的具体action,category(一般前两个值是默认的即下面方法里的).包名和类名 public void start(View v) { Intent intent2 = new Intent("android.intent.action.MAIN"); intent2.addCategory("android.intent.category.LAUNCHER");

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

断断续续的,<Android源码设计模式解析>也看了一遍,书中提到了很多的设计模式,但是有部分在开发中见到的几率很小,所以掌握不了也没有太大影响. 我觉得这本书的最大价值有两点,一个是从设计模式的角度去理解Android源码,结合着日常开发中的常用类,对设计模式的理解会更加的深刻:另外一个好处就是了解常用模式,再看其他人写的代码的时候,更容易理解代码思路.下面是我的读书笔记和一些思考,设计模式只整理我认为重要的部分. 建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常

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

建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很多参数,而且这些参数并不都是必须的,那么这种情况下就比较适合Builder. 比如构建一个AlertDialog,标题.内容.取消按钮.确定按钮.中立按钮,你可能只需要单独设置几个属性即可:另外在我的OkHttpPlus项目中,构造一个Http请求也是这样的,有可能你只需要设置URL,有可能需要添加

[转]Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

http://blog.csdn.net/jiangwei0910410003/article/details/52057543 一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,Android中使用摄像头的场景很多,在没有直播这个行业出现之前,之前用到摄像头的最多就两个场景,一个是二维码扫描,一个是美颜拍照类的应用.那么这里就来看看Android中

Android 中LocalBroadcastManager的使用方式

Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中BroadcasetReceiver的注册方式 manifest清单文件中的全局注册 按照生命周期,在Service或者Activity中使用代码注册 manifest的注册方式  <receiver android:name="com.sample.test.MyBroadcastReciever">       

(转)Android 中LocalBroadcastManager的使用方式

发表于2个月前(2014-11-03 22:05)   阅读(37) | 评论(0) 0人收藏此文章, 我要收藏 赞0 1月10日 #长沙# OSC 源创会第32期开始报名 摘要 android中广播的作用非常大,对程序的运行起着非常重要的作用 LocalBroadcastManager Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中BroadcasetReceiver的注册方式 m