cameraview
camera
Syntax:
Java
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.zougla; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.hardware.Camera; import android.hardware.Camera.Size; import android.os.Bundle; import android.os.SystemClock; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Toast; // ---------------------------------------------------------------------- public class CameraPreview extends Activity { private Preview mPreview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Hide the window title. requestWindowFeature(Window.FEATURE_NO_TITLE); // Create our Preview view and set it as the content of our activity. mPreview = new Preview(this,this); setContentView(mPreview); mPreview.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(!mPreview.onProgress) mPreview.onClick(); } }); } } // ---------------------------------------------------------------------- class Preview extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; Context CON; Activity ACT; public boolean onProgress=false; Preview(Context context,Activity activity) { super(context); CON=context; ACT=activity; // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where // to draw. mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. mCamera.stopPreview(); mCamera.release(); mCamera = null; } private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.05; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; // Try to find an size match aspect ratio and size for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } // Cannot find the one match the aspect ratio, ignore the requirement if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; } Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] imageData, Camera c) { onProgress=true; if (imageData != null) { Intent mIntent = new Intent(); try { FileOutputStream out = new FileOutputStream( "/sdcard/Deltio1.jpg"); Bitmap e = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); e.compress(Bitmap.CompressFormat.JPEG, 65, out); out.close(); Intent i = new Intent(ACT, MediaSend.class); ACT.startActivity(i); } catch (Exception e) { Toast .makeText( CON, "Πρόβλημα στην αποθήκευση.Βεβαιωθείτε ότι έχετε sdcard εγκατεστημένη", Toast.LENGTH_LONG).show(); ACT.finish(); } // FileUtilities.StoreByteImage(mContext, imageData, // 50, "ImageName"); SystemClock.sleep(2000); mCamera.startPreview(); onProgress=false; // setResult(FOTO_MODE,mIntent); // finish(); } } }; public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = mCamera.getParameters(); //List<Size> sizes = parameters.getSupportedPreviewSizes(); //Size optimalSize = getOptimalPreviewSize(sizes, w, h); //parameters.setPreviewSize(optimalSize.width, optimalSize.height); parameters.setPreviewSize(w, h); //mCamera.setParameters(parameters); mCamera.startPreview(); } public void onClick() { if(!onProgress) mCamera.takePicture(null, mPictureCallback, mPictureCallback); } }