webentwicklung-frage-antwort-db.com.de

Android - Kamera mit niedriger Bitmap-Qualität

Wenn Sie mit der Android-Kamera Intent ein Bild aufnehmen, bekomme ich ein Bitmap-Bild von geringer Qualität. Ich habe mich gefragt, ob es möglich ist, dieses Bild zu einer anständigen Qualität zu machen.

Ich habe einige Informationen darüber gegoogelt und ich denke, dass ich 'EXTRA_OUTPUT' verwenden muss ( http://developer.Android.com/reference/Android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE )

Ich kämpfe, weil ich nicht weiß, wo ich ihn platzieren soll, und ich weiß nicht, ob es mein Problem lösen wird.

Nach dem Drücken von btnTakePhoto ändere ich das Layout und öffne die Android-Kamera. Die Bitmap wird in einem zweiten Layout angezeigt (niedrige Qualität). Hier ist mein Code:

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());
    }
}

BEARBEITEN: Das Bild wird nirgendwo gespeichert. Es ist wichtig, auf Facebook gepostet zu werden, nachdem Sie es akzeptiert haben (Snapchat)

7

Verwenden Sie nicht bitmap, sondern stattdessen 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();
                }
            }
        }
    }
7
John Joe

in Ihrem cameraIntent müssen Sie den URI angeben, wenn die Kameraaktivität das Bild mit der vollen Auflösung speichert:

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);

wenn Sie nicht angeben, dass Sie nur eine Miniaturansicht in onActivityResult erhalten. Also geben Sie das an und lesen das Bild aus dem URI.

In Ihrem onActivityResult sollten Sie also Folgendes tun:

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

das ist es.

4
whd.nsr

Sie müssen das Bild im Speicher speichern, um das Bild in voller Größe zu erhalten. Überprüfen Sie dies: http://developer.Android.com/training/camera/photobasics.html#TaskPath

0
Drilon Blakqori