Android - Wenn Sie ein Foto von der nach vorne gerichteten Kamera aufnehmen, wird das Foto gedreht
Ich erstelle eine App in Android, in der der Benutzer nur im Hochformat ein Bild von der Frontkamera aufnehmen kann. Ich habe es geschafft, die Kameraansicht auf Hochformat einzustellen, aber wenn ein Bild aufgenommen wird, erscheint es gedreht. Das Schlimmste ist, dass die Drehrichtung bei verschiedenen Telefonen unterschiedlich ist. Bei einem Telefon wird die Drehrichtung nach rechts gedreht, bei einem anderen nach links.
Hier sind meine Code-Schnipsel
Um sicherzustellen, dass die Aktivität nur im Porträt abgespielt wird
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Kamera holen
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info=new Camera.CameraInfo();
for (int i=0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
camera=Camera.open(i);
}
}
}
if (camera == null) {
camera=Camera.open();
}
}
Kamera drehen
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if(previewing){
camera.stopPreview();
previewing = false;
}
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);
initPreview(width, height);
startPreview();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Bild gemacht
PictureCallback myPictureCallback_JPG = new PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera arg1) {
// new SavePhotoTask().execute(data);
Intent myIntent = new Intent(MainActivity.this, CropActivity.class);
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
myIntent.putExtra("image", bitmap);
MainActivity.this.startActivity(myIntent);
}};
Der BMP-Send wird immer in gedrehter Form angezeigt, jedoch nicht immer mit 90 Grad. Es sieht so aus, als würde Android 4.0 nicht nur drehen, sondern auch das Bild spiegeln. Gibt es eine gute Möglichkeit, um zu erkennen und sicherzustellen, dass ich immer das richtige Bild bekomme?