【发布时间】:2013-12-26 16:00:29
【问题描述】:
我正在尝试使用 ADT 开发适用于 Android 的应用,但我卡在了相机的预览中。
我的应用程序应该尝试将在相机预览上绘制的矩形内对象的通道识别到相机预览中。 物体的移动必须点亮矩形。
我现在开发了我的预览并绘制了矩形。 我的想法包括两个步骤:
- 只制作灰色的预览色调
- 照亮矩形以改变矩形内的灰度阈值。
你有什么推荐的?
下面是完整的代码:
public class CameraTestActivity extends Activity {
CameraPreview cv;
DrawView dv;
FrameLayout bingo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
public void Load(){
Camera c = getCameraInstance();
if (c != null){
bingo = new FrameLayout(this);
bingo.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
cv = new CameraPreview(this,c);
bingo.addView(cv);
dv = new DrawView(this);
bingo.addView(dv);
setContentView(bingo);
}
else {
Toast toast = Toast.makeText(getApplicationContext(),
"Unable to find camera. Closing.", Toast.LENGTH_SHORT);
toast.show();
finish();
}
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e){
e.printStackTrace();
}
return c;
}
@Override
protected void onPause() {
super.onPause();
if (cv != null){
cv.onPause();
cv = null;
}
}
@Override
protected void onResume(){
super.onResume();
Load();
}
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d("CameraView", "Error setting camera preview: " + e.getMessage());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mHolder.getSurface() == null){
return;
}
try {
mCamera.stopPreview();
} catch (Exception e){
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d("CameraView", "Error" + e.getMessage());
}
}
public void onPause() {
mCamera.release();
mCamera = null;
}
}
public class DrawView extends SurfaceView{
public DrawView(Context context) {
super(context);
setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStyle (Paint.Style.STROKE);
paint.setColor(Color.RED);
canvas.drawRect((canvas.getWidth() / 2) - (canvas.getWidth() / 6),
(canvas.getHeight() / 2) - (canvas.getHeight() / 14) ,
(canvas.getWidth() / 2) + (canvas.getWidth() / 6),
(canvas.getHeight() / 2) + (canvas.getHeight() / 14), paint);
}
}
}
【问题讨论】:
标签: eclipse camera adt preview rect