Android在Surface视图中设置Orientation Portrait

时间:2016-01-23 18:52:36

标签: java android camera orientation

我使用此代码查看相机上的实时边框并拍照但相机的方向不正确,请帮帮我,谢谢

CameraOverview.java:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

public class CameraOverview1 extends Activity implements   SurfaceHolder.Callback{

private Camera camera = null;
private SurfaceView cameraSurfaceView = null;
private SurfaceHolder cameraSurfaceHolder = null;
private boolean previewing = false;

private Display display = null;


private static int wid = 0, hgt = 0;

private LayoutInflater layoutInflater = null;
private View cameraViewControl = null;
private LayoutParams layoutParamsControl = null;

private Button btnCapture = null;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) 
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);



display = getWindowManager().getDefaultDisplay();
wid = display.getWidth();
hgt = display.getHeight();

getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);



 setContentView(R.layout.cameraoverlay1);

cameraSurfaceView = (SurfaceView)findViewById(R.id.cameraSurfaceView);
cameraSurfaceHolder = cameraSurfaceView.getHolder();
cameraSurfaceHolder.addCallback(this);
cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


layoutInflater = LayoutInflater.from(getBaseContext());
layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);


cameraViewControl = layoutInflater.inflate(R.layout.cambutton, null);     
this.addContentView(cameraViewControl, layoutParamsControl);
btnCapture = (Button)findViewById(R.id.btnCapture);
btnCapture.setOnClickListener(new android.view.View.OnClickListener() 
{   
    @Override
    public void onClick(View v) 
    {
        // TODO Auto-generated method stub
        camera.takePicture(cameraShutterCallback, 
                cameraPictureCallbackRaw,
                cameraPictureCallbackJpeg);

    }
});
 } 

        ShutterCallback cameraShutterCallback = new ShutterCallback() 
   {  
    @Override
   public void onShutter() 
    {
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Your pic Captured",Toast.LENGTH_LONG).show();}};


      PictureCallback cameraPictureCallbackRaw = new PictureCallback() 
      {  
    @Override
   public void onPictureTaken(byte[] data, Camera camera) 
   {
    // TODO Auto-generated method stub   
   }
   };

      PictureCallback cameraPictureCallbackJpeg = new PictureCallback() 
     {  
@Override
public void onPictureTaken(byte[] data, Camera camera) 
{
    // TODO Auto-generated method stub   
    Bitmap cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

    wid = cameraBitmap.getWidth();
    hgt = cameraBitmap.getHeight();

    Bitmap newImage = Bitmap.createScaledBitmap(cameraBitmap, 608, 1080, true);

    Canvas canvas = new Canvas(newImage);

    canvas.drawBitmap(cameraBitmap, 0f, 0f, null);

    Drawable drawable = getResources().getDrawable
            (R.drawable.w1a);
    drawable.setBounds(0, 0, 608, 1080);
    drawable.draw(canvas);

    File storagePath = new File(Environment.
            getExternalStorageDirectory() + "/BackToLife/face/1/"); 
    storagePath.mkdirs(); 

    File myImage = new File(storagePath,
            Long.toString(1) + ".jpg");

    try
    {
        FileOutputStream out = new FileOutputStream(myImage);
        newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);


        out.flush();
        out.close();
    }
    catch(FileNotFoundException e)
    {
        Log.d("In Saving File", e + "");    
    }
    catch(IOException e)
    {
        Log.d("In Saving File", e + "");
    }
 camera.startPreview();

    drawable = null;
      newImage.recycle();
    newImage = null;
     cameraBitmap.recycle();
    cameraBitmap = null;

     }
  };

     @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(cameraSurfaceHolder);
    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

try
{
    camera = Camera.open();

}
catch(RuntimeException e)
{
    Toast.makeText(getApplicationContext(), "Device camera is not working properly, please try after sometime.", Toast.LENGTH_LONG).show();
}
   }

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

我尝试使用setOrientation(90)修复它,但是当活动运行app停止工作时。

0 个答案:

没有答案