sql >> データベース >  >> RDS >> 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を初めて使用する場合、これを理解するには難しすぎます。最初にグーグルでアンドロイドのドキュメントを読んで、チュートリアルを読んでください。基本的なアプリを作成します。最初に学ぶ




    1. タイムゾーンオフセットを使用して日付を取得する

    2. MySQLスタートアップエラー-ルート要素がありません

    3. Oracle 11gは、一致するすべてのオカレンスを正規表現で取得します

    4. mysqlデータベースを排他的にロックする方法は?