返回信息流代码如下:
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();
}
}
};
}
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #5910同步于 2012/4/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
一个拍照程序,在2.3上及虚拟机上都能运行,2.2上一打开就意外
likaibupt1
2012/4/9镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
/* 将拍到的图片绘制出来 */
Canvas canvas= mHolder.lockCanvas();
//上面这句和
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
冲突,但是要预览,holder的类型需要是SURFACE_TYPE_PUSH_BUFFERS的,或者2.3这个问题解决了