有一个RGB24图像的数据存储在一个Byte[]里,如何将其显示到界面?

解决方案 »

  1.   

    不要“保存成图片文件然后再用Api来显示”的那种方法
      

  2.   

    byte[] data;  
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
    ImageView i = new ImageView(this);
    // 设置图片给ImageView
    i.setImageBitmap(bitmap);
      
      

  3.   

    ls的方法是需要文件头的,如果没有文件头的话,可以先用把数组转成Buffer,然后用public static Bitmap createBitmap(int width, int height, Config config)方法创建一个指定大小格式的Bitmap对象,用public void copyPixelsFromBuffer(Buffer src)方法赋值
      

  4.   


    Config里好像没有RGB24类型的
      

  5.   

    不知道有没有像ddraw那样的操作方式,直接写内存的
      

  6.   

    转成ARGB888就行了,你的就是少个alpha通道,按四字节对齐写就行了,然后再显示 
      

  7.   

    啊,记错了,如ls所说,只有argb8888的,我目前也是转一次再做的
      

  8.   

    public class MyBitmap{ public Bitmap createMyBitmap(byte[] data, int width, int height){ 
      int []colors = convertByteToColor(data);
      if (colors == null){
       return null;
      }
       
      Bitmap bmp = Bitmap.createBitmap(colors, 0, width, width, height, 
               Bitmap.Config.ARGB_8888);      
      return bmp;
    }
    // 将一个byte数转成int
    // 实现这个函数的目的是为了将byte数当成无符号的变量去转化成int
    public  int convertByteToInt(byte data){
      
      int heightBit = (int) ((data>>4) & 0x0F);
      int lowBit = (int) (0x0F & data);
      return heightBit * 16 + lowBit;
    }
    // 将纯RGB数据数组转化成int像素数组
    public int[] convertByteToColor(byte[] data){
      int size = data.length;
      if (size == 0){
       return null;
      }
      
      int arg = 0;
      if (size % 3 != 0){
       arg = 1;
      }
      
      // 一般情况下data数组的长度应该是3的倍数,这里做个兼容,多余的RGB数据用黑色0XFF000000填充  
      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]); 
        
        // 获取RGB分量值通过按位或生成int的像素值      
        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;
    }
    }这个类可以转