Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Android-Kamera zum Aufnehmen mehrerer Fotos

Bild vor dem Speichern auf dem Bildschirm anzeigen :

Verwenden Sie meinen Code. Ich mache ein Bild mit Kameraabsicht und bevor ich es in der Galerie speichere, wird es dem Benutzer mit einer Schaltfläche zum Speichern und Abbrechen angezeigt:- Kameraabsicht aufrufen:-

// 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){}
      }
 }
}

Implementieren Sie Ihren Done-and-Cancel-on-Click-Listener - was Sie darin tun möchten. Mein Code erfasst Ihr Bild, dreht es unabhängig von der Kameradrehung in die richtige Richtung und zeigt es Ihnen in einem Dialog an, bevor es gespeichert wird

Dieser Code speichert Ihr Bild in der DB. Sie müssen "blob" verwenden, um das Bild zu speichern. Verwenden Sie diesen Code:-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() ;

}

Es gibt eine alternative Absichtsaktion für die Gerätekamera, die die Kamera im Standbildmodus startet und nicht beendet wird, bis der Benutzer mit der Aktivität fertig ist:

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

In Verbindung mit einem ContentObserver war dies genau das, was ich erreichen musste. oder Behandeln Sie dies in ActivityResult.

Hinweis:- Wenn Sie neu bei Android sind, ist dies jetzt zu schwer für Sie zu verstehen. Bitte lesen Sie zuerst die Android-Dokumentation auf Google und lesen Sie die Tutorials. Einfache Apps erstellen. Lernen Sie zuerst