2017-03-01 7 views
0

Ich bin Bildaufnahme mit Rückfahrkamera von meiner Android-Anwendung, der Code, den ich benutze funktioniert gut, aber das Problem ist, dass das Bild aufgenommen Unschärfe ist, habe ich setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); verwendet, aber immer noch das Bild ist erfasste Unschärfe. Also bitte sag, wie kann ich diesen Unschärfe-Effekt loswerden?Bild mit der Kamera aufgenommen ist Unschärfe

Code:

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.hardware.Camera; 
import android.os.Environment; 
import android.view.SurfaceView; 
import java.io.File; 
import java.io.FileOutputStream; 


public class PhotoCapture { 

    public static void takeSnapShots(Context context) { 

     SurfaceView surface = new SurfaceView(context); 
     Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
     Camera camera = Camera.open(); 
     int cameraCount = Camera.getNumberOfCameras(); 

     Camera.Parameters p = camera.getParameters(); 
     p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
     camera.setParameters(p); 

     try { 
      camera.setPreviewDisplay(surface.getHolder()); 
      camera.startPreview(); 
      camera.takePicture(null, null, jpegCallback); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static Camera.PictureCallback jpegCallback = new Camera.PictureCallback() { 

     public void onPictureTaken(byte[] data, Camera camera) { 
      String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ File.separator+"picure.jpg"; 
      File pictureFile = new File(path); 

      try { 
       FileOutputStream outputStream = new FileOutputStream(pictureFile); 
       Bitmap realImage = BitmapFactory.decodeByteArray(data, 0, data.length); 
       Matrix mtx = new Matrix(); 
       mtx.setRotate(90); 
       realImage = Bitmap.createBitmap(realImage, 0, 0, realImage.getWidth(), realImage.getHeight(), mtx, true); 
       realImage.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); 
       outputStream.close(); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      finally { 
       camera.stopPreview(); 
       camera.setPreviewCallback(null); 
       camera.release(); 
       camera = null; 
      } 
     } 
    }; 
} 

Antwort

1

Wie wäre das?

 camera.startPreview(); 
     camera.autoFocus(new AutoFocusCallback() { 
      @Override 
      public void onAutoFocus(boolean success, Camera camera) { 
       if(success){ 
        camera.takePicture(null, null, jpegCallback); 
       } 
      } 
     }); 
Verwandte Themen