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