1

私は次のタスクを実装しようとしています:

  1. 画像を撮る
  2. それをSDカードに保存し、パスを文字列に保存します。

コード:

public synchronized void onActivityResult(final int requestCode, int resultCode, final Intent data) 
    {
       if (resultCode == Activity.RESULT_OK) 
       {
           if (requestCode == RESULT_CAMERA_SELECT)
           {
               try 
               {
                   photo = null;
                   saveImage();
               }
               catch (IOException e) 
               {
                   e.printStackTrace();
               }
           }
       }


public static int calculateInSampleSize(
                BitmapFactory.Options options, int reqWidth, int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {
            if (width > height) {
                inSampleSize = Math.round((float)height / (float)reqHeight);
            } else {
                inSampleSize = Math.round((float)width / (float)reqWidth);
            }
        }
        return inSampleSize;
    }


 public void saveImage() throws IOException
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            FileInputStream is2 = new FileInputStream(new File(myReceipt.filename));
            BitmapFactory.decodeStream(is2 ,null, options);
            // Here is2 get file with width of pic as 2000*1500 etc

            options.inSampleSize = calculateInSampleSize(options, 100, 100);

            options.inJustDecodeBounds = false;

// PROBLEM EXISTS AT THIS POINT. imageBitmap is returned as null.....


  Bitmap imageBitmap = BitmapFactory.decodeStream(is2 ,null, options);
            imageBitmap = Bitmap.createScaledBitmap(imageBitmap, 100, 100, false);

            try{

                        photo = this.createFile(fileName, ".jpg");
                        thumbFileName = photo.getAbsolutePath();
                        Uri uri = Uri.fromFile(photo);

                        try {
                               FileOutputStream out = new FileOutputStream(photo);
                               imageBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
                                } catch (Exception e) {
                               e.printStackTrace();
                                }
                                is2.close();
                                photo = null;
                                imageBitmap = null;
                                imageView.setImageURI(uri);
                            }catch(Exception e)
                            {
                                displayAlert("Can't create file to take picture!","SD Card Error");
                            }

        }

コードによると、私は画像を撮影し、それを画像ビューに表示するためにサムイメージを作成し、このサムイメージも保存しています。しかし、エラーはで発生します

  Bitmap imageBitmap = BitmapFactory.decodeStream(is2 ,null, options);

nullを返します。誰かが何が起こっているのか説明できますか//?

4

3 に答える 3

4

一度だけ使えますInputStream

電話するとき

BitmapFactory.decodeStream(is2 ,null, options);

それは「消費」しis2ます。取得するため

Bitmap imageBitmap = BitmapFactory.decodeStream(is2 ,null, options);

作業中は、新しいものを作成し、InputStreamそこで明示的に使用する必要があります。

于 2012-07-06T12:43:31.123 に答える
0

これを試して。

ContentResolver cr = mContext.getContentResolver();

is2をcr.openInputStream(uri);に置き換えます。

ビットマップimageBitmap=BitmapFactory.decodeStream(cr.openInputStream(uri)、null、options);

それは私にとってはうまくいっています。

于 2012-07-06T12:48:43.683 に答える
-1

NullPointerException■プログラムで使用される変数にデータ/値が含まれていない場合に発生します。したがって、画像のURLまたは場所が正しいかどうかを確認してください。これは、JREが画像を見つけられない場合や、画像を使用できずに。が表示される場合があるためNullPointerExceptionです。それはいつも私に起こります。

于 2012-07-06T12:54:59.660 に答える