Android摄像头方向为新手

问题描述:

我拿着相机摄像头方向面临的问题的工作。我通过互联网找到了一些答案,我认为这个答案可能最适合我。Android摄像头方向为新手

任何人都可以给我详细的指令,how to add this answer在我的相机项目?

这里是我的Full camera project Code.

直接代码在这里

public class AndroidCamera extends Activity implements SurfaceHolder.Callback{ 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 

Button buttonTakePicture; 



final int RESULT_SAVEIMAGE = 0; 

    /** Called when the activity is first created. */ 
    @SuppressWarnings("deprecation") 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     getWindow().setFormat(PixelFormat.UNKNOWN); 
     surfaceView = (SurfaceView)findViewById(R.id.camerapreview); 
     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 


     controlInflater = LayoutInflater.from(getBaseContext()); 
     View viewControl = controlInflater.inflate(R.layout.control, null); 
     LayoutParams layoutParamsControl 
     = new LayoutParams(LayoutParams.FILL_PARENT, 
     LayoutParams.FILL_PARENT); 
     this.addContentView(viewControl, layoutParamsControl); 


     buttonTakePicture = (Button)findViewById(R.id.takepicture); 
     buttonTakePicture.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    camera.takePicture(myShutterCallback, 
     myPictureCallback_RAW, myPictureCallback_JPG); 
    }}); 

     LinearLayout layoutBackground = (LinearLayout)findViewById(R.id.background); 
     layoutBackground.setOnClickListener(new LinearLayout.OnClickListener(){ 


    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

    buttonTakePicture.setEnabled(false); 
    camera.autoFocus(myAutoFocusCallback); 
    }}); 
    } 

    AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){ 

    @Override 
    public void onAutoFocus(boolean arg0, Camera arg1) { 
    // TODO Auto-generated method stub 
    buttonTakePicture.setEnabled(true); 
    }}; 

    ShutterCallback myShutterCallback = new ShutterCallback(){ 

    @Override 
    public void onShutter() { 
    // TODO Auto-generated method stub 

    }}; 

PictureCallback myPictureCallback_RAW = new PictureCallback(){ 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
    // TODO Auto-generated method stub 

    }}; 

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
    // TODO Auto-generated method stub 
    /*Bitmap bitmapPicture 
    = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ 

    Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues()); 

    OutputStream imageFileOS; 
    try { 
    imageFileOS = getContentResolver().openOutputStream(uriTarget); 
    imageFileOS.write(arg0); 
    imageFileOS.flush(); 
    imageFileOS.close(); 

    Toast.makeText(AndroidCamera.this, 
     "Image saved", 
     Toast.LENGTH_SHORT).show(); 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    camera.startPreview(); 
    }}; 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 
    // TODO Auto-generated method stub 
    if(previewing){ 
    camera.stopPreview(); 
    previewing = false; 
    } 

    if (camera != null){ 
    try { 
    camera.setPreviewDisplay(surfaceHolder); 
    camera.startPreview(); 
    previewing = true; 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
} 



@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera = Camera.open(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 
} 
+1

@Vikalp Patel - 请停止提示仅在问题中插入粗体文本的编辑。这会分散注意力,并且不会提高这些问题的可读性。 –

为了解决您的相机的方向改变了你的surfaceCreated功能,从风景模式默认的Android相机默认波泰特模式旋转摄像头(因为您的活动处于肖像模式):

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    camera = Camera.open(); 
    Parameters parameters = camera.getParameters(); 
    camera.setDisplayOrientation(90); 
    camera.setParameters(parameters); 
} 

您的a PP也崩溃,当您尝试并拍照......但就是手头没有问题......尽管它可能有你需要将下面的行添加到您的清单做:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

: )