package
org.opencv.samples.tutorial2;
import
java.io.IOException;
import
java.util.List;
import
android.app.Activity;
import
android.content.Context;
import
android.graphics.Bitmap;
import
android.hardware.Camera;
import
android.hardware.Camera.Size;
import
android.os.Bundle;
import
android.util.AttributeSet;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
import
android.widget.ImageView;
public
class
Tutorial2Activity
extends
Activity {
MyCameraSurface mSurface;
ImageView mImgView;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.imageview_layout);
}
}
class
MyCameraSurface
extends
SurfaceView
implements
SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
Tutorial2Activity mainActivity;
Bitmap prBitmap;
public
MyCameraSurface(Tutorial2Activity context) {
super
(context);
mainActivity = context;
mHolder = getHolder();
mHolder.addCallback(
this
);
}
public
void
surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try
{
mCamera.setPreviewDisplay(mHolder);
mCamera.setPreviewCallback(
new
Camera.PreviewCallback() {
@Override
public
void
onPreviewFrame(
byte
[] data, Camera camera) {
Camera.Parameters param = camera.getParameters();
int
width = param.getPreviewSize().width;
int
height = param.getPreviewSize().height;
prBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
FindFeatures(height, width,data, prBitmap);
System.out.println(prBitmap);
mainActivity.mImgView.setImageBitmap(prBitmap);
}
});
}
catch
(IOException e) {
mCamera.release();
mCamera =
null
;
}
}
public
void
surfaceDestroyed(SurfaceHolder holder) {
if
(mCamera !=
null
) {
mCamera.stopPreview();
mCamera.release();
mCamera =
null
;
}
}
public
void
surfaceChanged(SurfaceHolder holder,
int
format,
int
width,
int
height) {
Camera.Parameters params = mCamera.getParameters();
List<Size> arSize = params.getSupportedPreviewSizes();
if
(arSize ==
null
) {
params.setPreviewSize(width, height);
}
else
{
int
diff =
10000
;
Size opti =
null
;
for
(Size s : arSize) {
if
(Math.abs(s.height - height) < diff) {
diff = Math.abs(s.height - height);
opti = s;
}
}
params.setPreviewSize(opti.width, opti.height);
}
mCamera.setParameters(params);
mCamera.startPreview();
}
public
native
void
FindFeatures(
int
height,
int
width,
byte
in[], Bitmap prBitmap);
}