精華區beta java 關於我們 聯絡資訊
各位大大好 我第一次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