1

こんにちは私はバイト配列として保存する画像の生のダンプを持っています私はこれを表面ビューに表示する必要があります。このバイト配列を可変ビットマップに変換してサーフェスホルダーのキャンバスにレンダリングしようとしましたが、「drawBitmap」関数が呼び出されると、このnullポインター例外が発生します。

BlockquoteE / 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)Blockquoteで

これは私がバイト配列をレンダリングしようとする方法です

    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          

        }
4

1 に答える 1

2

バイト配列bytesがインスタンス化されることはありません。したがって、を呼び出すとBitmapFactory.decodeByteArray、が返されますnull

Androidリファレンスから:

public static Bitmap decodeByteArray(byte [] data、int offset、int length、BitmapFactory.Options opts)

以来:APIレベル1
指定されたバイト配列から不変のビットマップをデコードします。
..。

戻り値
デコードされたビットマップ。画像データをデコードできなかった場合はnull、optsがnull以外の場合は、サイズのみが返されるように要求された場合(opts.outWidthおよびopts.outHeight)

于 2012-09-26T10:00:32.453 に答える