3

カメラで撮ったばかりの写真に画像ビューを設定することに興味があります。カメラ アプリケーションは問題なく動作し、SD カードの適切な場所に画像を保存しますが、画像を読み込んで画像ビューに設定しようとすると、空白のままになります。最近撮影した画像のパスを使用する代わりに、既存の画像のパスをハードコーディングしようとしましたが、同じ問題が発生します。他のスレッドを確認しましたが、コードに違いは見られません。

これがカメラ機能です。

private void takePicture(){
    Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "/resources/resources/WI"+job_num); 
    image_name = username+"_"+date+".png";
    File image_file = new File(imagesFolder, image_name);
    while(image_file.exists()){
        image_name = username+"-"+date+"("+ image_count+").png";
        image_count+=1;
        image_file = new File(imagesFolder,image_name);
    }
    image_path = imagesFolder+image_name;
    Uri uriSavedImage = Uri.fromFile(image_file);
    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
    int request_code = 100;
    startActivityForResult(imageIntent, request_code);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){ 
        ImageView thumb = (ImageView) findViewById(R.id.thumbnail);
        Bitmap bmp = BitmapFactory.decodeFile(image_path);
        thumb.setImageBitmap(bmp);
        Toast.makeText(this, "Image Saved", Toast.LENGTH_SHORT).show();
    }
    else
        Toast.makeText(this,"Error Saving Image", Toast.LENGTH_SHORT).show();
}

最後に、ImageView は次のとおりです。

<ImageView
    android:id="@+id/thumbnail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/camera"
    android:layout_marginTop="10dp"
    android:contentDescription="@string/picture_thumbnail"/>

何を変更する必要がありますか?ありがとう!

4

2 に答える 2

6

これを試して :

    final ImageView thumb = (ImageView) findViewById(R.id.thumbnail);
    thumb.post(new Runnable() {
        @Override
        public void run()
        {
            Bitmap bmp = BitmapFactory.decodeFile(image_path);
            thumb.setImageBitmap(bmp);
            Toast.makeText(this, "Image Saved", Toast.LENGTH_SHORT).show();
        }
    });

ただし、UI スレッドでビットマップをデコードすることはお勧めしません。

ここから:

Android カメラ アプリケーションは、onActivityResult() に渡されるリターン インテントの写真をエクストラの小さなビットマップとして、キー「データ」の下にエンコードします。次のコードは、この画像を取得し、ImageView に表示します。

private void handleSmallCameraPhoto(Intent intent) {
    Bundle extras = intent.getExtras();
    mImageBitmap = (Bitmap) extras.get("data");
    mImageView.setImageBitmap(mImageBitmap);
}

注:この「データ」のサムネイル画像は、アイコンには適しているかもしれませんが、それ以上のものではありません。フルサイズの画像を扱うには、もう少し手間がかかります。

幸運をお祈りしています。

于 2013-06-21T20:17:27.377 に答える
1

このコードを試してくださいonActivityResult

  InputStream stream = null;
 if (bitmap != null) {
      bitmap.recycle();
    }
    stream = getContentResolver().openInputStream(data.getData());
    bitmap = BitmapFactory.decodeStream(stream);
    stream.close();
    thumb.setImageBitmap(bitmap);

ビットマップをリサイクルすることを常にお勧めします。SO1 & Google 開発

編集 このコードを試してください

 if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo);
    }  
于 2013-06-21T20:15:21.540 に答える