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

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

    -END-

  • 相关阅读:
    java执行构造器和初始化字段的顺序
    java语言中的varargs
    对Java语言的byte类型变量进行无符号提升
    VisualStudio 切换帐号 (原帐号已过期且无法登录时用)
    C/C++ 的关系运算符采用短路运算
    实现std::string的ltrim、rtrim和trim方法
    Excel 用于批量把单元格设置为"文本格式保存的数字"的宏
    为什么要用webUI?
    CEF3中js调用delphi内部方法
    2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4992548.html
Copyright © 2020-2023  润新知