Dhana
Dhana

Reputation: 554

In custom camera is not getting clear image capture in android

Created the application to take picture using custom Camera but the camera is not capturing the image in clear visible like Intent Camera. here is the code:

Custom_CameraActivity.java:-

public class Custom_CameraActivity extends Activity {
private Camera mCamera;
private CameraPreview mCameraPreview;
Context context;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    context = getApplicationContext();
    mCamera = getCameraInstance();
    mCameraPreview = new CameraPreview(this, mCamera);
    SurfaceView preview = (SurfaceView) findViewById(R.id.camera_preview);
    preview.addView(mCameraPreview);

    Button captureButton = (Button) findViewById(R.id.button_capture);
    captureButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCamera.takePicture(null, null, mPicture);
        }
    });
}

/**
 * Helper method to access the camera returns null if it cannot get the
 * camera or does not exist
 *
 * @return
 */
private Camera getCameraInstance() {
    Camera camera = null;
    try {
        camera = Camera.open();
        Camera.Parameters parameters = camera.getParameters();
        parameters.set("jpeg-quality", 100);
        parameters.setPictureFormat(PixelFormat.JPEG);
        parameters.setPictureSize(800, 600);
        parameters.setRotation(180);
        camera.setDisplayOrientation(90);
        camera.setParameters(parameters);
    } catch (Exception e) {
        // cannot get camera or does not exist
    }
    return camera;
}

Camera.PictureCallback mPicture = new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        try {
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
            if (bitmap.getWidth() > bitmap.getHeight()) {
                Matrix matrix = new Matrix();
                matrix.postRotate(180);
                bitmap = Bitmap.createBitmap(bitmap , 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            }
            } catch (Exception e) {

        }
    }
};

}

CameraPreview.java:-

public class CameraPreview extends SurfaceView implements
    SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;

// Constructor that obtains context and camera
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera) {
    super(context);
    this.mCamera = camera;
    this.mSurfaceHolder = this.getHolder();
    this.mSurfaceHolder.addCallback(this);
    this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    try {
        mCamera.setPreviewDisplay(surfaceHolder);
        mCamera.startPreview();
    } catch (IOException e) {
        // left blank for now
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    mCamera.stopPreview();
    mCamera.release();
}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
                           int width, int height) {
    // start preview with new settings
    try {
        mCamera.setPreviewDisplay(surfaceHolder);
        mCamera.startPreview();
    } catch (Exception e) {
        // intentionally left blank for a test
    }
}}

enter image description here

In this image the letters can't be read.

Upvotes: 0

Views: 1838

Answers (2)

Dhana
Dhana

Reputation: 554

Fixed the issue by adding below Code:-

Camera.Parameters params = c.getParameters();
if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
} else {
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
c.setParameters(params);

Upvotes: 2

Maguz
Maguz

Reputation: 132

try this

private Camera getCameraInstance() {
Camera camera = null;
try {
    camera = Camera.open();
    Camera.Parameters parameters = camera.getParameters();
    parameters.set("s3d-prv-frame-layout", "none");
    parameters.set("s3d-cap-frame-layout", "none");
    parameters.set("iso", "auto");
    parameters.set("contrast", 100);
    parameters.set("brightness", 50);
    parameters.set("saturation", 100);
    parameters.set("sharpness", 100);
    parameters.setAntibanding("auto");
    parameters.setPictureFormat(ImageFormat.JPEG);
    parameters.set("jpeg-quality", 100);
    if (params.isZoomSupported())
        params.setZoom(0);       
    parameters.setPictureSize(800, 600);
    parameters.setRotation(180);
    camera.setDisplayOrientation(90);
    camera.setParameters(parameters);
} catch (Exception e) {
    // cannot get camera or does not exist
}
    return camera;
}

EDIT 1.

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);

Upvotes: 1

Related Questions