Showing posts with label Live Frame on Camera Preview. Show all posts
Showing posts with label Live Frame on Camera Preview. Show all posts

Wednesday, 1 May 2013

Set Live Frame on Camera Capturing Image in Android

Hi Guys,
Hope All of You Doing Well.
Here I am going to show you how to put live Photo Frame on Android Camera. Sometime you need to put a fabulous Photo frame during your image captures. It is more interesting to put a Frame during image capture than after image captures. Live frame putting give you a edge over static frame putting because it provide easily adjustment of your image captures.
Here is the code
Create a Android Activity and put it name CameraOverview1 . Copy and paste following code in this class.
public class CameraOverview1 extends Activity implements SurfaceHolder.Callback{

private Camera camera = null;
private SurfaceView cameraSurfaceView = null;
private SurfaceHolder cameraSurfaceHolder = null;
private boolean previewing = false;

private Display display = null;


private static int wid = 0, hgt = 0;

private LayoutInflater layoutInflater = null;
private View cameraViewControl = null;
private LayoutParams layoutParamsControl = null;

private Button btnCapture = null;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    display = getWindowManager().getDefaultDisplay(); 
    wid = display.getWidth();
    hgt = display.getHeight();

    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.cameraoverlay1);

    cameraSurfaceView = (SurfaceView)findViewById(R.id.cameraSurfaceView);
    cameraSurfaceHolder = cameraSurfaceView.getHolder();
    cameraSurfaceHolder.addCallback(this);
    cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    layoutInflater = LayoutInflater.from(getBaseContext());
    layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);

    cameraViewControl = layoutInflater.inflate(R.layout.cambutton, null);     
    this.addContentView(cameraViewControl, layoutParamsControl);
btnCapture = (Button)findViewById(R.id.btnCapture);
    btnCapture.setOnClickListener(new OnClickListener() 
    {   
        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            camera.takePicture(cameraShutterCallback, 
                    cameraPictureCallbackRaw,
                    cameraPictureCallbackJpeg);
        }
    });
} 

ShutterCallback cameraShutterCallback = new ShutterCallback() 
{  
    @Override
    public void onShutter() 
    {
        // TODO Auto-generated method stub   
    }
};

PictureCallback cameraPictureCallbackRaw = new PictureCallback() 
{  
    @Override
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        // TODO Auto-generated method stub   
    }
};

PictureCallback cameraPictureCallbackJpeg = new PictureCallback() 
{  
    @Override
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        // TODO Auto-generated method stub   
        Bitmap cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

        wid = cameraBitmap.getWidth();
        hgt = cameraBitmap.getHeight();

        Bitmap newImage = Bitmap.createBitmap(wid, hgt, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(newImage);

        canvas.drawBitmap(cameraBitmap, 0f, 0f, null);

        Drawable drawable = getResources().getDrawable
                (R.drawable.frame1);
        drawable.setBounds(0, 0, wid, hgt);
        drawable.draw(canvas);

        File storagePath = new File(Environment.
                getExternalStorageDirectory() + "/MyCameraApp/"); 
        storagePath.mkdirs(); 

        File myImage = new File(storagePath,
                Long.toString(System.currentTimeMillis()) + ".jpg");

        try
        {
            FileOutputStream out = new FileOutputStream(myImage);
            newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);


            out.flush();
            out.close();
        }
        catch(FileNotFoundException e)
        {
            Log.d("In Saving File", e + "");    
        }
        catch(IOException e)
        {
            Log.d("In Saving File", e + "");
        }

        camera.startPreview();

        drawable = null;

        newImage.recycle();
        newImage = null;

        cameraBitmap.recycle();
        cameraBitmap = null;
    }
};

@Override
public void surfaceChanged(SurfaceHolder holder, 
        int format, int width, int height) 
{
    // TODO Auto-generated method stub

    if(previewing)
    {
        camera.stopPreview();
        previewing = false;
    }
    if (camera != null){
        try 
        {
    camera.setPreviewDisplay(cameraSurfaceHolder);
            camera.startPreview();
            previewing = true;
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();  
        }
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) 
{
    // TODO Auto-generated method stub
    try
    {
        camera = Camera.open();
    }
    catch(RuntimeException e)
    {
        Toast.makeText(getApplicationContext(), "Device camera is not working properly, please try after sometime.", Toast.LENGTH_LONG).show();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) 
{
    // TODO Auto-generated method stub
    camera.stopPreview();
    camera.release();
    camera = null;
    previewing = false;
}}
Now You have to put xml file for GUI in your project. cameraoverlay1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<SurfaceView
    android:id="@+id/cameraSurfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/frame1" />
</LinearLayout>
and cambutton.xml  in your project layout folder.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="vertical" >
<Button
    android:id="@+id/btnCapture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:background="@drawable/cambutton"
    android:gravity="center_vertical" />
</LinearLayout>                                                            
This is the all source code to put a live photo frame during image captures in Android. This code just putting one simple static frame named as frame1.png, In my next blog i will write a full dynamic code for putting Live frame.Usercan choose Frame image before starting the image    Capture 
Happy Coding Thanks

Build a Custom Kernel Module for Android

Hi Guys!!!Hope you are doing well !!!. Today I will describe how you can write a custom kernel module(Hello world) for Android and load it a...