web-dev-qa-db-ja.com

Android-カメラ意図の低いビットマップ品質

Android Camera Intentを使用して写真を撮ると、低品質のビットマップ画像が表示されます。この画像を適切な品質にできるかどうか疑問に思っていました。

私はそれについていくつかの情報をググって、私は「EXTRA_OUTPUT」を使用しなければならないと思います( http://developer.Android.com/reference/Android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE

どこに配置すればよいかわからず、問題が解決するかどうかもわかりません。

BtnTakePhotoを押した後、レイアウトを変更してAndroidカメラを開きます。ビットマップは2番目のレイアウトで表示されます(低品質)。これが私のコードです。

import Android.content.Intent;
import Android.graphics.Bitmap;
import Android.provider.MediaStore;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
import Android.widget.ImageButton;
import Android.widget.ImageView;

public class Camera extends AppCompatActivity {
    ImageButton btnTakePhoto;
    ImageView imgTakenPhoto;
    private static final int CAM_REQUEST = 1313;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        btnTakePhoto = (ImageButton) findViewById(R.id.buttonFoto);
        imgTakenPhoto = (ImageView) findViewById(R.id.genomenFoto);


    btnTakePhoto.setOnClickListener(new btnTakePhotoClicker());
}
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == CAM_REQUEST){
            setContentView(R.layout.share);
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            imgTakenPhoto = (ImageView) findViewById(R.id.genomenFoto);
            imgTakenPhoto.setImageBitmap(thumbnail);
        }
    }

    class btnTakePhotoClicker implements Button.OnClickListener {

        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAM_REQUEST);
        }
    }

    //CameraShare layout -- back button - Go back to first layout
    public void ibBackToPhotograph(View v) {
        setContentView(R.layout.camera);
        btnTakePhoto = (ImageButton) findViewById(R.id.buttonFoto);
        btnTakePhoto.setOnClickListener(new btnTakePhotoClicker());
    }
}

編集:画像はどこにも保存されません。あなたがそれを受け入れた後、facebookに投稿するのはメンターです(スナップチャット)

8

bitmapを使用しないでください。代わりにuriを使用してください。

 ImageView imageView;
 Uri image;
 String mCameraFileName;

 private void cameraIntent() {
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

        Date date = new Date();
        DateFormat df = new SimpleDateFormat("-mm-ss");

        String newPicFile = df.format(date) + ".jpg";
        String outPath = "/sdcard/" + newPicFile;
        File outFile = new File(outPath);

        mCameraFileName = outFile.toString();
        Uri outuri = Uri.fromFile(outFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outuri);
        startActivityForResult(intent, 2);
    }

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == 2) {
                if (data != null) {
                    image = data.getData();
                    imageView.setImageURI(image);
                    imageView.setVisibility(View.VISIBLE);
                }
                if (image == null && mCameraFileName != null) {
                    image = Uri.fromFile(new File(mCameraFileName));
                    imageView.setImageURI(image);
                    imageView.setVisibility(View.VISIBLE);
                }
                File file = new File(mCameraFileName);
                if (!file.exists()) {
                    file.mkdir();
                }
            }
        }
    }
11
John Joe

cameraIntentでは、カメラアクティビティが画像をフル解像度で保存するときにURIを指定する必要があります。

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);

onActivityResultでサムネイルを受け取ることだけを指定しない場合。それを指定して、uriからイメージを読み取ります。

したがって、onActivityResultで次のことを行う必要があります。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(capturedImageUri, options);

それでおしまい。

5
whd.nsr

フルサイズの画像を取得するには、画像をストレージに保存する必要があります。これを確認してください: http://developer.Android.com/training/camera/photobasics.html#TaskPath

0
Drilon Blakqori