Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android的SurfaceView上呈现字节数组_Android_Bytearray_Surfaceview_Android Canvas_Surfaceholder - Fatal编程技术网

在android的SurfaceView上呈现字节数组

在android的SurfaceView上呈现字节数组,android,bytearray,surfaceview,android-canvas,surfaceholder,Android,Bytearray,Surfaceview,Android Canvas,Surfaceholder,嗨,我有一个原始转储的图像,我存储为字节数组,我必须显示在表面视图这一点。我试图将这个字节数组转换成一个可变位图,并在surface holder的画布上进行渲染,但当调用“drawBitmap”函数时,我得到了这个空指针异常 BlockQuote/AndroidRuntime(28358):致命异常:主 E/AndroidRuntime(28358):java.lang.NullPointerException E/AndroidRuntime(28358):在android.graphics

嗨,我有一个原始转储的图像,我存储为字节数组,我必须显示在表面视图这一点。我试图将这个字节数组转换成一个可变位图,并在surface holder的画布上进行渲染,但当调用“drawBitmap”函数时,我得到了这个空指针异常

BlockQuote/AndroidRuntime(28358):致命异常:主 E/AndroidRuntime(28358):java.lang.NullPointerException E/AndroidRuntime(28358):在android.graphics.Canvas.throwIfRecycled(Canvas.java:1025) E/AndroidRuntime(28358):位于android.graphics.Canvas.drawBitmap(Canvas.java:1065) 大宗报价

这就是我试图呈现字节数组的方式

    public void surfaceCreated(SurfaceHolder holder) {
         // TODO Auto-generated method stub
              //getting byte array
              byte[] bytes;
    File f1= new File("/data/dump.txt");
    int offset = 0, n = 0;
    InputStream in;
    long length = f1.length();
    bytes = new byte[(int) length];

          try {

          in = new FileInputStream(f1);

           while (offset < bytes.length
                && (n = in.read(bytes, offset, bytes.length - offset))  >= 0) {
            offset += n;

           }
        in.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


              // getting byte array
                Bitmap bmp;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inMutable = true;
    bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length,options );
              Canvas  canvas = holder.lockCanvas();
            if(canvas != null){

                canvas.drawBitmap(bmp, 0, 0, null); 

              }
            holder.unlockCanvasAndPost(canvas); //finalize          

        }
public void surfaceCreated(SurfaceHolder持有者){
//TODO自动生成的方法存根
//获取字节数组
字节[]字节;
文件f1=新文件(“/data/dump.txt”);
整数偏移=0,n=0;
输入流输入;
长长度=f1.length();
字节=新字节[(int)长度];
试一试{
in=新文件输入流(f1);
while(偏移量=0){
偏移量+=n;
}
in.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//获取字节数组
位图bmp;
BitmapFactory.Options=new-BitmapFactory.Options();
options.inMutable=true;
bmp=BitmapFactory.decodeByteArray(字节,0,字节.长度,选项);
Canvas Canvas=holder.lockCanvas();
if(canvas!=null){
drawBitmap(bmp,0,0,null);
}
holder.unlockCanvasAndPost(画布);//完成
}

您的字节数组
字节
从未实例化。因此,当您调用
BitmapFactory.decodeByteArray
时,它返回
null

从:

公共静态位图DecodeBytArray(字节[]数据、整数偏移量、整数长度、位图工厂。选项opts)

自:API 1级
从指定的字节数组解码不可变位图。

返回
解码后的位图,如果无法解码图像数据,则为null;如果opts为非null,则如果opts请求,则仅返回大小(在opts.outWidth和opts.outHeight中)


除了在
byte[]bytes
行中缺少分号之外,
bytes
似乎在任何地方都没有实例化。您是否跳过了
surfaceCreated
函数中的一些代码?您好,是的,实际上我在从套接字和存储中读取字节srray的地方剪辑了一些代码,因为我认为这不会造成任何问题。我检查了bmp文件始终为空,添加了空检查和崩溃停止,但我无法在surfaceview上渲染。@amitsigh is
“/data/dump.txt“
有效的格式转储?我认为如果它不是一个有效的编码字节数组,它就不会工作。尝试检查,看看它是否有助于SNADIR,因为我提到它是原始rgb 888格式转储。。这是要解码为位图的有效格式还是仅jpeg和png有效格式?@amit有效格式由BitmapFactoryOptions定义。。是可能的值(您可能应该使用ARGB_8888,将alpha层添加到bytearray,然后它应该正常工作)。是的,我添加了像素格式以使其正常工作,请更正我的错误。如果我想忽略alpha通道,我应该使用ARGBX_888