zoukankan      html  css  js  c++  java
  • 将Bitmap byte裸数据转换成Bitmap图片int数据

    转自:http://blog.sina.com.cn/s/blog_025270e901014z3p.html,尊重原创

    我们在JNI中处理得到的BMP图片Raw数据,我们应该如何转换为Bitmap呢?

    1 由于得到的数据是unsigned char *类型的数据,而对于Bitmap的类来说,其类方法里面:

    public static Bitmap createBitmap(int colors[]int offset, int stride,
                int width, int height, Config config)

     

    要求传入的是int *数据,这里我们就需要将unsigned char *数据转换为RGB的int值了。

     

    java里面的方法可以采取如下代码:

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

     

  • 相关阅读:
    使用form插件 和ajax 结合使用 没有调用success的原因
    不使用插件的ajax 上传文件
    struts2 使用ajax进行图片上传
    Java输入输出流详解
    SSM框架整合(Spring+SpringMVC+MyBatis+Oracle)
    Java WEB开发环境搭建以及创建Maven Web项目
    java连接Oracle数据库
    java轻量级IOC框架Guice
    Java String字符串方法
    python入门
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2844740.html
Copyright © 2011-2022 走看看