0

登録プロセス中にユーザーから写真を取得しようとしています。フォームと、カメラ、ギャラリー、ドロップボックスなどを起動し、ユーザーに写真を選択または撮影するように求めるボタンがあります。

ボタンonClickメソッドでは、このトピックの2番目の回答の例を使用しています。ユーザーが画像のカメラまたはギャラリーを選択できるようにすると、オプションとして画像アプリとのダイアログが開きます。写真を撮るか選択した後、onActivityResultの私のコードは次のとおりです。

Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
foto.setImageBitmap(mImageBitmap)

だから私は2つの問題があります。まず、これはサムネイル画像のみを取得し、必要なフルサイズの画像は取得しません。第二に、これはユーザーがカメラで新しい写真を撮ることを選択した場合にのみ機能します...

フルサイズの写真を取得するために、このコードは良いAndroidカメラの意図のようです:フルサイズの写真を取得する方法は?しかし、それはカメラで撮った写真のためだけであり、このチューザーの意図でも、このコードがどこに収まるかはわかりません。魔女のソースの使用が選択されていることを確認する必要がありますか?もしそうなら、どうすればそれを行うことができますか?

編集:チューザーインテントは、カメラ、ギャラリー、ドロップボックス、ASTROファイルマネージャーの4つの画像ソースオプションを提供します。もちろん、他のアプリをインストールしておけば、もっと多くのオプションを利用できるでしょう。だから私はそれぞれの場合にインテントの内容をチェックしました:

CAMERA: act=inline-data (has extras)
DROPBOX and GALLERY: dat="file path"
ASTRO: dat="file path" (has extras)

したがって、インテントに余分なものがあるかどうかを確認しても、ソースはわかりません。また、data.hasExtra( "act")とdata.hasExtra( "dat")の両方がfalseを返しています。

4

1 に答える 1

2

カメラでキャプチャした画像からフルサイズの画像を取得するためのコードは次のとおりです

オブジェクトを宣言する

private File dir, destImage,f;
private String cameraFile = null;

private static final int CAPTURE_FROM_CAMERA = 1;

あなたの活動で

dir = new File(Environment.getExternalStorageDirectory()
            .getAbsolutePath(), "MyApp");
if (!dir.isDirectory())
    dir.mkdir();

destImage = new File(dir, new Date().getTime() + ".jpg");
cameraFile = destImage.getAbsolutePath();   
try{
    if(!destImage.createNewFile())
        Log.e("check", "unable to create empty file");

}catch(IOException ex){
    ex.printStackTrace();
}

f = new File(destImage.getAbsolutePath());
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destImage));
startActivityForResult(i,CAPTURE_FROM_CAMERA);

あなたのonActivityResultで

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
      case CAPTURE_FROM_CAMERA:
        if (resultCode==RESULT_OK) {
            if(f==null){
                if(cameraFile!=null)
                    f = new File(cameraFile);
                else
                    Log.e("check", "camera file object null line no 279");
            }else
                Log.e("check", f.getAbsolutePath());
            Bitmap useBitmap = BitmapFactory.decodeFile(f.getAbsolutePath());

                            // now use this bitmap wherever you want
        }
        break;
     }
}
于 2012-11-19T13:10:39.287 に答える