Android相机拍多张照片

问题类:

public class problem extends Activity { ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.problem); iv=(ImageView) findViewById(R.id.imageView1); Button b=(Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Bitmap bm=(Bitmap) data.getExtras().get("data"); iv.setImageBitmap(bm); } } 

这就是我想要做的:

  • 拍多张照片

  • 在屏幕上显示它们

  • 将它们存储在mysql数据库中。

我是android的新手,请告诉我该怎么做。我搜索过。但我找不到答案。 从这段代码中只拍摄一张照片。

保存前在屏幕上显示图像:

使用我的代码。 我正在使用相机意图拍摄照片,然后在将其保存到图库之前,使用“保存并取消”按钮向用户显示: – 调用相机意图: –

 // This code is to call the camera intent. Basically it will start your camera. Put this code in a button or something String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator +CommonFunction.getDateTime()+".jpg"; // Get File Path Intent takePictureFromCameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); takePictureFromCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(SD_CARD_TEMP_DIR))); startActivityForResult(takePictureFromCameraIntent, 123); 

onActivityResult: –

 // This function is called when you come back to your activity after the intent has finished. Do read android documentation on Google. It will Help public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_RESULT) { if (resultCode == Activity.RESULT_OK) { String galleryImatePath = SD_CARD_TEMP_DIR; // make SD_CARD_TEMP_DIR Global so that you can access it here from camera intent or pass it in put Extra method and retrieve it here File f = new File(galleryImatePath); try {//This code will rotate your image if you have taken the image by rotating the camera Bitmap cameraBitmap = null; BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = false; bmOptions.inPurgeable = true; bmOptions.inBitmap = cameraBitmap; bmOptions.inMutable = true; cameraBitmap = BitmapFactory.decodeFile(galleryImatePath,bmOptions); ByteArrayOutputStream bos = new ByteArrayOutputStream(); cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 50, bos); //To Rotate image Code ExifInterface exif = new ExifInterface(galleryImatePath); float rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); System.out.println(rotation); float rotationInDegrees = exifToDegrees(rotation); System.out.println(rotationInDegrees); Matrix matrix = new Matrix(); matrix.postRotate(rotationInDegrees); final Bitmap rotatedBitmap = Bitmap.createBitmap(cameraBitmap , 0, 0, cameraBitmap.getWidth(), cameraBitmap.getHeight(), matrix, true); FileOutputStream fos=new FileOutputStream(galleryImatePath); rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 50, fos); fos.write(bos.toByteArray()); cameraBitmap.recycle(); System.gc(); fos.flush(); fos.close(); // To set image in imageview in dialog. This code will set your image in a custon dialog box "captiondialog". It will contain a full width and height imageview and two textviews - done and cancel. It is upto u what you want to define in the textview's click listener. For example, you can pass the storing image in database in the "Done" textview and "Cancel" textview will dismiss your captiondialog and you app will return to your activity Capdialog = new Dialog(AddToDo.this,android.R.style.Theme_NoTitleBar_Fullscreen); Capdialog.setContentView(R.layout.captiondialog); Capdialog.setCancelable(false); TextView cancel = (TextView) Capdialog .findViewById(R.id.cancel); TextView done = (TextView) Capdialog.findViewById(R.id.done); Capdialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); ImageView img = (ImageView) Capdialog.findViewById(R.id.image); img.setImageBitmap(rotatedBitmap); } catch(Exception e){} } } } 

实现你的完成并取消点击监听器 – 你想要做什么。 我的代码将捕获您的图像,无论相机旋转如何都向右旋转图像并在保存之前在对话框中显示

此代码将您的图像存储在DB中。您必须使用“blob”来存储图像。使用此代码: – public void insertImageInDb(int id,Bitmap img){

 byte[] data = bos.toByteArray(); // Use This or the code in comments below /* ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 0, outputStream); byte[] data = outputStream.toByteArray();*/ insertStatement_logo.bindLong(1, id); insertStatement_logo.bindBlob(2, data); insertStatement_logo.executeInsert(); insertStatement_logo.clearBindings() ; 

}

对于以静止图像模式启动摄像机的设备摄像机还有另一种意图操作,并且在用户完成活动之前不会退出:

 Intent intent = new Intent( MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); this.startActivity(intent); 

与ContentObserver一起使用,这正是我需要完成的。 或者在ActivityResult中处理它。

注意: – 如果你是Android的新手,这对你来说太难理解了。 请先在谷歌上阅读android文档并阅读教程。 制作基本应用。 先学习