Skip to content

Conversation

@ErmaIsabel
Copy link

I have a dobut iam successfully run a android native code for SurfaceView Over a camera
Now i want it to Convert to Phonegap is It Possible.Please give Your Valuble comments
Below Iam Giving the native Code...Plz Help
Thanks

MainActivity

 package com.example.testcamera;

 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;


 import android.app.Activity;
 import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.PixelFormat;
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.ShutterCallback;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
 import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.RelativeLayout.LayoutParams;


 public class MainActivity 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.activity_main);

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.overlay, null);     
this.addContentView(cameraViewControl, layoutParamsControl);

cameraViewControl = layoutInflater.inflate
                                               (R.layout.vampireimage, 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);


  File storagePath = new File(Environment.
                getExternalStorageDirectory() + "/Vampire Photos/"); 
  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();



  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;
}
  try 
  {
  Camera.Parameters parameters = camera.getParameters();
  parameters.setPreviewSize(360,420);
  parameters.setRotation(90);
  camera.setParameters(parameters);

  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)
{

}
}

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) 
{
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}
}   

LAYOUTS

Main.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent">

  <SurfaceView android:id="@+id/cameraSurfaceView"  
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:background="@drawable/frame"/>       

</LinearLayout>

Overlay.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:gravity="right">

    <Button
        android:id="@+id/btnCapture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10px"
        android:background="@drawable/click"
        android:gravity="center_vertical" />



</LinearLayout>

devgeeks and others added 2 commits October 31, 2013 20:29
Updated to follow the Cordova Plugin spec, so that it works with Plugman.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants