2017-02-14 10 views
0

私はこのコードを使用してボタンをクリックすると画像が正常に撮影されますが、横向きモードであるため、params.set("orientation", "portrait");を使用してカメラの向きをポートレートに設定しました。働いていない。私もcamera.setDisplayOrientation(90);を試しましたが、結果に変更はありません。ポートレートモードで写真を撮るにはどうすればいいですか?カメラの向きをポートレートに設定しない

マイコード:

package com.example.appdeveloperahmed.ct2; 

import android.hardware.Camera; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Display; 
import android.view.Surface; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 


@SuppressWarnings("deprecation") 
public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    Button b; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b = (Button) findViewById(R.id.button); 
     b.setOnClickListener(this); 
    } 


    @Override 
    public void onClick(View v) { 
     takeSnapShots(); 
    } 


    private void takeSnapShots() { 

     SurfaceView surface = new SurfaceView(this); 
     Camera camera = null; 
     Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
     int cameraCount = Camera.getNumberOfCameras(); 

     for (int camIdx=0; camIdx < cameraCount; camIdx++) { 
      Camera.getCameraInfo(camIdx, cameraInfo); 
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) 
       camera = Camera.open(camIdx); 
     } 
     if(camera==null) 
      camera = Camera.open(); 

     try { 
      camera.setPreviewDisplay(surface.getHolder()); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Camera.Parameters parameters = camera.getParameters(); 
     parameters.set("orientation", "portrait"); 
     camera.setParameters(parameters); 

     camera.startPreview(); 

     camera.takePicture(null, null, jpegCallback); 
    } 


    Camera.PictureCallback jpegCallback = new Camera.PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      FileOutputStream outStream = null; 
      try { 
       String dir_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
       outStream = new FileOutputStream(dir_path+ File.separator+"sl_img"+"1"+".jpg"); 
       outStream.write(data); 
       outStream.close(); 
      } 
      catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       camera.stopPreview(); 
       camera.release(); 
       camera = null; 
       Toast.makeText(getApplicationContext(), "Image snapshot Done",Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 

} 
+0

多分あなたのデバイスは古すぎますか? http://stackoverflow.com/a/8516211/3836142 –

+0

私のデバイスはSamsung Tab E –

+0

よくある質問または重複した質問がこのリンクをお試しください。 http://stackoverflow.com/a/10218309/5860777 –

答えて

0

私はあなたの代わりにsurfaceviewにカメラを設定する、モバイルでデフォルトのカメラのオプションを使用することをお勧めします。以下の私のコードを見つけてください。

private void callCamera() { 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(intent, CAMERA_REQUEST); 
} 

private Uri getOutputMediaFileUri(int type) { 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

private static File getOutputMediaFile(int type) { 

    File mediaStorageDir = new File(
      Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
      IMAGE_DIRECTORY_NAME); 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
        + IMAGE_DIRECTORY_NAME + " directory"); 
      return null; 
     } 
    } 
    Random gen = new Random(); 
    int n = 10000; 
    n = gen.nextInt(n); 

    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "IMG_" + n + ".jpg"); 
    } else { 
     return null; 
    } 
    return mediaFile; 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent  data) { 
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
if (requestCode == CAMERA_REQUEST) { 
     if (resultCode == RESULT_OK) { 

      pickFromCamera(); 
     } else if (resultCode == RESULT_CANCELED) { 
      Toast.makeText(this, Message.userCancel, Toast.LENGTH_SHORT).show(); 
     } else 
      Toast.makeText(this, "Failed to Capture Image", Toast.LENGTH_SHORT).show(); 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

private void pickFromCamera() { 
    String path = fileUri.getPath(); 
    //Use this fileUri 
} 

キャプチャした画像のサイズを取得したい場合。

private void getIMGSize(String path){ 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    int imageHeight = options.outHeight; 
    int imageWidth = options.outWidth; 

    Log.e("SizeofImage",String.valueOf(imageWidth)+" "+String.valueOf(imageHeight)); 

} 
関連する問題