This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
HUYEN TUE DAO PROJECT DATE BY MAY 30, 2014 SAY CHEESE BUILDING
A CUSTOM CAMERA APPLICATION 360dp wrap_content ANDEVCON 2014
BUILDING A CUSTOM CAMERA APPLICATION Getting Started Setting up
the Camera Taking pictures Camera settings New features in API 14
2
ABOUT ME Mobile developer: native Android and native iOS
(personally I use Android but no I do not have a favorite) Computer
Engineering, University of MD, College Park Marylander living in
Colorado Gamer (video, board, card, anything): currently Dota 2,
Dont Starve, Kingdom Rush, 7 Wonders 3
TITLE CUSTOM CAMERA CAPABILITY AND AVAILABILITY What you want
to do What features the API supports Typical for Android
development: Build.VERSION etc. What features the device camera has
Typical for Android development: use-feature and PackageManager
Specic to camera: querying support level from the Camera class What
you can do
THE CUSTOM CAMERA: THE MANIFEST Camera application
hardware-driven so vital to separate critical features from
optional ones. Highly recommended to use specic to specify required
features. Why? ! - This will automatically enforce the manifest
element for all camera features. 5
THE CUSTOM CAMERA: THE MANIFEST Just specifying the camera
permission (without any specications) means that a device would
require the following: - a back-facing camera - a front-facing
camera - auto-focus - flash If you do not need any of the above,
specify with android:required=false 6
TITLE CAMERA CLASS AND INNER CLASSES android.hardware.Camera*
Device camera client: setup + access point Preview callback Shutter
callback Picture taking callback ! ! ! Auto Focus callback Zoom
listener Face detection listener Camera.CameraInfo front or back,
orientation, shutter disable Camera.Parameters preview, picture
output, photography stuff: features/settings dependent on the
device camera: flash modes, color effects, scene modes, white
balance, etc. Camera.Area photography stuff: focus and metering,
rectangular bounds + weight Camera.Face face stuff, bounds and
feature (left eye, right eye, mouth) coordinates for a face
identied with face detection, condence score APK 14+: Data objects
Device camera information + settings Camera.Size width and height:
picture size, video size, preview size
TITLE THE CUSTOM CAMERA: CAMERA SETUP Add a SurfaceView to your
layout for the camera preview. Implement a SurfaceHolder.Callback
to listen for #surfaceCreated, #surfaceChanged, and
#surfaceDestroyed Pass the callback to the SurfaceHolder instance
of the SurfaceView. Open a Camera instance: Camera#open Get the
Camera.Parameters and perform any initial setup. After the preview
surface has been created, call Camera#setPreviewDisplay with the
SurfaceHolder. Start the preview: Camera#startPreview. wait for
surface to be created
THE CUSTOM CAMERA: BASIC SETUP Things to note about setting up
the camera preview: - The surface is destroyed when the visibility
of the SurfaceView is set to View.INVISIBLE. - Camera#release will
stop the preview - Camera#stopPreview nulls out callbacks, stops
face detection - Camera#setPreviewDisplay should be called after
the surface is created. No error, just no preview. - Any changes to
the preview size must be between calls to Camera#startPreview and
Camera#stopPreview 9
THE CUSTOM CAMERA: PICTURE TAKING When the camera is set up,
call takePicture(ShutterCallback, PictureCallback, PictureCallback,
PictureCallback)! PictureCallback parameters = 3 picture formats:
raw (uncompressed), postview, and JPEG. - Raw and postview
availability depends on device - takePicture stops the camera
preview so Camera#startPreview should be called in/after callbacks
10
THE CUSTOM CAMERA: CAMERA INFO CameraInfo: information about a
particular device camera - orientation: angle of rotation when
facing the camera for the camera image to match the natural
orientation of the device - facing: camera direction - whether the
shutter sound can be disabled Camera.getCameraInfo: camera IDs are
indices 0 to n-1 Use CameraInfo to swap between front and back -
Use PackageManager to check if a front camera exists unless you
have front camera as a requirement for device - Close the current
camera before swapping 11
TITLE DEVICE ORIENTATION VS CAMERA ORIENTATION Natural device
orientation Natural camera orientation 90 difference
THE CUSTOM CAMERA: ROTATION Some thoughts on rotation: -
Empirically, trying to work with camera/display rotation and
conguration changes sucks: - Complicated. - Orientation changes do
not coordinate well with camera orientation changes. - Can change
the activity orientation change animation in API 18+). 13
THE CUSTOM CAMERA: CAMERA INFO Recommendation: - Keep a xed
activity orientation. - Call Camera#setDisplayOrientation to adjust
for CameraInfo.orientation. - Use the OrientationEventListener to
rotate the UI. - Does mean that your application thumbnail may look
sideways in the Recent Apps list. 14
THE CUSTOM CAMERA: CAMERA PARAMETERS Most of the fun stuff
(settings and modes) is set in Camera.Parameters. - A couple of
features (auto-focus and flash) have and PackageManager values. -
Most other features will provide support information via methods in
Camera.Parameters - Example: getMinExposureCompensation returns 0
if exposure compensation is unsupported - Several getters provide
lists of valid values for features or modes that have different
value ranges on different devices. - Note that API level also
factors: face detection and metering areas are API 14+. 15
THE CUSTOM CAMERA: CAMERA PARAMETERS For the most part,
Camera.Parameters can be changed while preview started and will
take effect immediately. For saving/restoring settings state, handy
methods: Camera.Parameters#flatten and Camera.Parameters#unflatten
Important: - Always call Camera#getParameters, do not hold onto
Camera.Parameters instances - To actually change parameters, set
values on a Camera.Parameters instance and call
Camera#setParameters 16
THE CUSTOM CAMERA: CAMERA PARAMETERS Random tips and
observations on Camera.Parameters: - Auto-focus may cause the flash
to activate depending on the camera and its drivers. - Setting a
scene mode overrides other parameters so if camera parameters have
UI feedback may want to call Camera#getParameters and update. Other
common camera/photo features done through Camera.Parameters: - GPS
coordinates and timestamps for geotagging photos. - Image size and
quality - Note that image size and preview size are independent
17
THE CUSTOM CAMERA: WORKING WITH AREAS API 14: Camera.Area and
metering areas and focus areas Camera.Area: denes bounds within the
viewnder for the camera to use in metering and focus Camera
viewnder/sensor has its own coordinate system different from a
Views coordinate system. Otherwise, just like setting other camera
parameters 18
TITLE VIEWFINDER COORDINATES VS VIEW COORDINATES 1000-1000 1000
-1000 Camera (0,0) H W View
THE CUSTOM CAMERA: FACE DETECTION API 14+ Camera.Face,
Camera.FaceDetectionListener, Camera#startFaceDetection,
Camera#stopFaceDetection! Camera.Face camera coordinates of bounds
of face in viewnder; maybe left eye, right eye, mouth position;
also condence camera/sensor coordinates -> view coordinates
20
THANKS SO MUCH FOR COMING! ! QUESTIONS? RANDOMLYTYPING.COM
[email protected] PRESENTER CONTACT HUYEN TUE DAO THINGS TO
CHECK OUT Standford Digital Image Processing Class
http://www.stanford.edu/class/ee368/Android/index.html ! Android
Design in Action https://www.youtube.com/watch?v=OLSa7fErTAM