我用
         private Bitmap BytesToBimap(byte[] b) {
if (b.length != 0) {

return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}
方法转换,
                bm = BytesToBimap(array);
System.out.println("bm :"+bm);
if( bm != null){
imageview.setImageBitmap(bm);
}else{
System.out.println("没有正常形成bitmap!");
}
           array不为空,事实证明执行的是  return BitmapFactory.decodeByteArray(b, 0, b.length);  这句。
           但是转换出来的bm却是空,这是什么情况。

解决方案 »

  1.   

    说明你的array中的值不符合图片格式。
      

  2.   

    byte里面的数据非法吧?
    试试读取一个真实的.png或者.jpg文件,然后生成一个图片。
      

  3.   

    我是用c语言从一个图形设备文件里读取的数据,然后返回到java,然后按照你们说的就不合法的数据了。怎么样才能让它合法?求解释。。
      

  4.   

    你是不是用JNI去读取的啊,你看看返回的byte里面的数据,是不是给改了,如何把里面的0给消去了或者,你读出来后,写入一下,保存图片原本格式,然后倒入PC,看看能否打开
      

  5.   

    是从jni读取的,从一个文件里边读取的数据。事实证明,数据确实不一样了(我用一个char[]字符串做了实验,原本的数据是0或者一组成的字符串,但是后来到java里边都不一样了。)您遇到过类似的问题么?应该怎么样解决数据才不会改变啊。。
      

  6.   

    读出来的是BUF,你想返回给java层用  是不是?JNI返回的是jbyteArray就可以了读出来的buf:char转换一下jbyteArray,注意不要丢了数据哦   就是我刚才说的0啊啥的
      

  7.   

    jni  中:
    jbyteArray test=(*env)->NewByteArray(env,_size);  
                    char a[_size];
                   // char a[20] ="-----101.-2001-1110"; 测试用的数据,结果在java中输出都在原本的基础上大了48.(- 输出的是45)
    memcpy(a,bits,_size);
        
                    //(*env)->SetByteArrayRegion(env,test,0,20, a);
                    (*env)->SetByteArrayRegion(env,test,0,_size, a);
                    munmap(bits, _ScreenSize);

                    close(_fb);
                    //return test;
    return test;java中:byte array[] = ndk.SendPicThread_ScreenShot();
    System.out.println("array[byte]:   " + array.length);
    for(int i=0;i<array.length;i++)
    {    if(i%1000==0){
    System.out.println("array ["+i+"] :"+array[i]);
                      }
    //array[i]=(byte) (array[i]-48);
    }bm = BitmapFactory.decodeByteArray(array, 0, array.length, null);
    System.out.println("bm :" + bm);
    if (bm != null) {
    imageview.setImageBitmap(bm);
    } else {
    System.out.println("没有正常形成bitmap!");
    }
    结果array中有数据,但是却输出:没有正常形成bitmap。。
    怎么才能不丢失0啊。穿过去的数据我感觉都是错误的。大部分数据都是-1,其他的又是很多是负数。
      

  8.   

    我怀疑你自己的JNI那边的问题,你确定一下吧
    我这里就是刚才说的那样处理的
      

  9.   

    jni可以正常传递数据啊。可否看一下您的jni代码?借鉴一下。
      

  10.   

    我的jni可以正常传递数据啊。可否借鉴一下您的jni代码?
      

  11.   

    你先确认下 你的JNI中的:test  是否是真的图片信息才行
      

  12.   

    真的图片信息   怎么测试呢?直接把信息存储到图片格式的文件里边?(比如说把信息存储到.jpg???)
      

  13.   

    比如你直接从SD卡中读出一张图片信息,传回到JAVA层显示,看看就知道了
    我不知道你的test从哪里赋值的,so。。不好说
      

  14.   

    悲剧,你不觉得你的数组索引越界了吗
    BitmapFactory.decodeByteArray(b,   0,   b.length);  
    =========================================>>>>
    BitmapFactory.decodeByteArray(b,   0,   b.length - 1);