BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #5910同步于 2012/4/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

一个拍照程序,在2.3上及虚拟机上都能运行,2.2上一打开就意外

likaibupt1
2012/4/9镜像同步2 回复
代码如下: public class Activity3 extends Activity { private Preview preview; private SurfaceView surfaceview; private SurfaceHolder mSurfaceHolder; private Button takephoto; private Button returnbutton; private int x,y; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main3); DisplayMetrics dm=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); x=dm.widthPixels; y=dm.heightPixels; surfaceview=(SurfaceView)findViewById(R.id.photoView); mSurfaceHolder=surfaceview.getHolder(); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); preview= new Preview(this); mSurfaceHolder.addCallback(preview); takephoto=(Button)findViewById(R.id.capture); returnbutton=(Button)findViewById(R.id.returnbutton); takephoto.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub preview.takePicture(); } }); returnbutton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.setClass(Activity3.this,MymediaActivity.class); startActivity(intent); Activity3.this.finish(); } }); //this.setContentView(preview); } public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: preview.takePicture(); break; case KeyEvent.KEYCODE_DPAD_RIGHT: {Intent intent=new Intent(); intent.setClass(Activity3.this,MymediaActivity.class); startActivity(intent); Activity3.this.finish(); break;} } return true; } } /* Preview-显示Preview */ class Preview extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; Bitmap CameraBitmap; public Preview(Context context) { super(context); mHolder = this.getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { /* 启动Camera */ mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { /* 释放mCamera */ mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } public void surfaceDestroyed(SurfaceHolder holder) { /* 停止预览 */ mCamera.stopPreview(); mCamera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { /* 构建Camera.Parameters对相机的参数进行设置 */ Camera.Parameters parameters = mCamera.getParameters(); /* 设置拍照的图片格式 */ parameters.setPictureFormat(PixelFormat.JPEG); /* 设置Preview的尺寸 */ parameters.setPreviewSize(200,200); /* 设置图像分辨率 */ //parameters.setPictureSize(320, 480); /* 设置相机采用parameters */ mCamera.setParameters(parameters); /* 开始预览 */ mCamera.startPreview(); } /* 拍照片 */ public void takePicture() { if (mCamera != null) { mCamera.takePicture(null, null, jpegCallback); } } /* 拍照后输出图片 */ private PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { // TODO Handle JPEG image data CameraBitmap = BitmapFactory.decodeByteArray(_data, 0, _data.length); int temp=(int)(Math.random()*1000); String filename="/sdcard/camera_"+temp+".jpg"; File myCaptureFile = new File(filename); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); CameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); /* 将拍到的图片绘制出来 */ Canvas canvas= mHolder.lockCanvas(); canvas.drawBitmap(CameraBitmap, 0, 0, null); mHolder.unlockCanvasAndPost(canvas); } catch (Exception e) { e.getMessage(); } } }; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
liubing1990机器人#1 · 2012/4/10
没有崩溃时候的log信息?
muxi机器人#2 · 2012/4/11
/* 将拍到的图片绘制出来 */ Canvas canvas= mHolder.lockCanvas(); //上面这句和 mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 冲突,但是要预览,holder的类型需要是SURFACE_TYPE_PUSH_BUFFERS的,或者2.3这个问题解决了