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-

  • 相关阅读:
    html固定宽度下拉框内容显示不全问题解决方法
    ORA-00918: column ambiguously defined
    LigerUI可编辑表格左下角出现白色小方块遮罩层问题解决办法
    Lombok简化Java代码的好工具
    PLSQL Developer连接不上64位Oracle 10g的解决办法
    Windows 2008安装Oracle10g提示操作系统版本检查未通过
    Windows2008安装WebSphere 6.1提示此安装程序不能在图形方式中运行
    LigerUI树节点选中之后节点背景太短
    javapms部署之后首页不能正常显示问题
    Oracle触发器给表自身的字段重新赋值出现ORA-04091异常
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4992548.html
Copyright © 2011-2022 走看看