Back to project page FxCameraApp.
The source code is released under:
MIT License
If you think the Android project FxCameraApp listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.af.experiments.FxCameraApp.camera; /*from w w w . j a va 2 s.c o m*/ import android.content.Context; import android.graphics.ImageFormat; import android.hardware.Camera; import android.view.Display; import android.view.Surface; import android.view.WindowManager; import java.util.List; public class CameraHelperFroyo extends CameraHelperEclair implements Camera.OnZoomChangeListener { private byte[] mBuffer; public CameraHelperFroyo(final Context context) { super(context); } @Override public void setDisplayOrientation(final int degrees) { getCamera().setDisplayOrientation(degrees); } @Override public int getOrientation() { final WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); final Display display = windowManager.getDefaultDisplay(); final int degrees; switch (display.getRotation()) { case Surface.ROTATION_270: degrees = 270; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_0: default: degrees = 0; break; } int result; final CameraHelper.CameraInfoCompat info = getCameraInfo(); if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; // result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } return result; } @Override public int getOptimalOrientation() { final WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); final Display display = windowManager.getDefaultDisplay(); final int degrees; switch (display.getRotation()) { case Surface.ROTATION_270: degrees = 270; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_0: default: degrees = 0; break; } int result; final CameraHelper.CameraInfoCompat info = getCameraInfo(); if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } return result; } @Override public void setPreviewCallback(final Camera.PreviewCallback cb) { final Camera camera = getCamera(); if (cb != null) { try { final Camera.Size previewSize = getPreviewSize(); final Camera.Size pictureSize = getPictureSize(); final Camera.Parameters parameters = camera.getParameters(); mBuffer = new byte[Math.max( previewSize.width * previewSize.height * ImageFormat.getBitsPerPixel(parameters.getPreviewFormat()) / 8, pictureSize.width * pictureSize.height * ImageFormat.getBitsPerPixel(ImageFormat.RGB_565) / 8 )]; camera.setPreviewCallbackWithBuffer(cb); camera.addCallbackBuffer(mBuffer); } catch (final OutOfMemoryError e) { mBuffer = null; camera.setPreviewCallbackWithBuffer(null); super.setPreviewCallback(cb); } } else { mBuffer = null; camera.setPreviewCallbackWithBuffer(null); camera.setPreviewCallback(null); } } @Override public void onPreviewFrame(final Camera.PreviewCallback cb) { if (mBuffer != null) { getCamera().addCallbackBuffer(mBuffer); } else { super.onPreviewFrame(cb); } } @Override public int getMaxExposureCompensation() { return getCamera().getParameters().getMaxExposureCompensation(); } @Override public int getMinExposureCompensation() { return getCamera().getParameters().getMinExposureCompensation(); } @Override public float getExposureCompensationStep() { return getCamera().getParameters().getExposureCompensationStep(); } @Override public int getExposureCompensation() { return getCamera().getParameters().getExposureCompensation(); } @Override public void setExposureCompensation(final int value) { final Camera.Parameters params = getCamera().getParameters(); params.setExposureCompensation(value); try { getCamera().setParameters(params); } catch (final RuntimeException e) {} // ?????? } @Override public boolean isZoomSupported() { return getParameters().isZoomSupported(); } @Override public int getMaxZoom() { return getParameters().getMaxZoom(); } @Override public List<Integer> getZoomRatios() { return getParameters().getZoomRatios(); } @Override public int getZoom() { return getParameters().getZoom(); } @Override public void setZoom(final int value) { final Camera.Parameters params = getParameters(); params.setZoom(value); getCamera().setParameters(params); } private Camera.OnZoomChangeListener mOnZoomChangeListener; public void setZoomChangeListener(final Camera.OnZoomChangeListener listener) { mOnZoomChangeListener = listener; getCamera().setZoomChangeListener(this); } @Override public void onZoomChange(final int zoomValue, final boolean stopped, final Camera camera) { if (mOnZoomChangeListener != null) { mOnZoomChangeListener.onZoomChange(zoomValue, stopped, getCamera()); } } @Override public void startSmoothZoom(final int value) { getCamera().startSmoothZoom(value); } @Override public void stopSmoothZoom() { getCamera().stopSmoothZoom(); } }