Pages

Label

Rabu, 01 Mei 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

0 komentar:

Posting Komentar

 
[tutup]