各位大大好
我第一次PO文
不太會排版請大家見諒
想請問
在實作簡易的相機程式時
為何手機用直立式時在預覽畫面都會跟手機成90度的差別
GOOGLE一下好像要加上setDisplayOrientation()
但不知道要加在哪裡
想請各位高手幫我解惑
謝謝
程式碼如下
package tw.brad.android.camera;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
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.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class CameraTest extends Activity implements Callback, OnClickListener
{
private Camera camera;
private SurfaceView surface;
private Parameters param;
private SurfaceHolder holder;
private int previewWidth = 480;
private int previewHeight = 320;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
surface = (SurfaceView)findViewById(R.id.surface);
surface.setOnClickListener(this);
holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void finish() {
super.finish();
surfaceDestroyed(holder);
}
private void resetCamera(){
if (camera!= null){
camera.stopPreview();
camera.release();
camera = null;
}
try{
camera = Camera.open();
param = camera.getParameters();
param.setPreviewSize(previewWidth, previewHeight);
param.setPictureFormat(PixelFormat.JPEG);
param.setPictureSize(previewWidth, previewHeight);
try{
camera = Camera.open();
param = camera.getParameters();
param.setPreviewSize(previewWidth, previewHeight);
param.setPictureFormat(PixelFormat.JPEG);
param.setPictureSize(previewWidth, previewHeight);
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
}
}catch(Exception ee){
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera.setDisplayOrientation(90);
resetCamera();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera!= null){
camera.stopPreview();
camera.release();
camera = null;
}
}
@Override
public void onClick(View v) {
camera.takePicture(new MyShutter(), new rawPictureCallback(), new
jpegPictureCallback());
}
private class rawPictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.i("CameraTest", "raw PictureTaken");
}
}
private class jpegPictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.i("CameraTest", "jpeg PictureTaken");
File root = Environment.getExternalStorageDirectory();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
File jpeg = new File(root.getAbsoluteFile() + "/mytest.jpg");
try {
BufferedOutputStream bout = new BufferedOutputStream(new
FileOutputStream(jpeg));
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, bout);
bout.flush();
bout.close();
} catch (FileNotFoundException e) {
Toast.makeText(CameraTest.this, "FileNotFound", 2000).show();
} catch (IOException e) {
Toast.makeText(CameraTest.this, "I/O Exception", 2000).show();
}
resetCamera();
}
}
private class MyShutter implements ShutterCallback {
@Override
public void onShutter() {
Log.i("CameraTest", "onShutter");
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.214.190