zoukankan      html  css  js  c++  java
  • 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-

  • 相关阅读:
    什么是“方法”
    break与continue
    循环结构2
    循环结构1
    Switch多选择结构
    if选择结构
    Scanner方法
    Doc参数信息
    运算符号
    变量与常量
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4992548.html
Copyright © 2011-2022 走看看