2016-06-13 2 views
-4

У меня возникли проблемы с сохранением изображения, взятого в конкретный каталог с определенным именем. Я понятия не имею, как это сделать. Ниже мой код.Сохранить изображение, взятое в определенном каталоге с определенным именем

CameraCaptureImage.java

public class CaptureCameraImage extends Activity { 

    public static int cameraID = 0; 
    public static boolean isBlack = true; 
    public static ImageView image; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activitycapturecameraimage); 
     image = (ImageView) findViewById(R.id.imgView); 
    } 



    public void onBackClick(View v){ 


     cameraID = 0; 
     Intent i = new Intent(CaptureCameraImage.this,CameraView.class); 
     startActivityForResult(i, 999); 
    } 

} 

CameraView.java

public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{ 
     private static final String TAG = "CameraTest"; 
     Camera mCamera; 
     boolean mPreviewRunning = false; 

     @SuppressWarnings("deprecation") 
     public void onCreate(Bundle icicle){ 
      super.onCreate(icicle); 
      Log.e(TAG, "onCreate"); 

      getWindow().setFormat(PixelFormat.TRANSLUCENT); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      setContentView(R.layout.cameraview); 
      ImageView img = (ImageView) findViewById(R.id.blankImage); 

      if(CaptureCameraImage.isBlack) 
       img.setBackgroundResource(android.R.color.black); 
      else 
       img.setBackgroundResource(android.R.color.white); 

      mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); 
      mSurfaceView.setOnClickListener(this); 
      mSurfaceHolder = mSurfaceView.getHolder(); 
      mSurfaceHolder.addCallback(this); 
      mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     } 

     @Override 
     protected void onRestoreInstanceState(Bundle savedInstanceState){ 
      super.onRestoreInstanceState(savedInstanceState); 
     } 


     Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 

      public void onPictureTaken(byte[] data, Camera camera) { 
       // TODO Auto-generated method stub 
       if (data != null){ 
        //Intent mIntent = new Intent(); 
        //mIntent.putExtra("image",imageData); 

        mCamera.stopPreview(); 
        mPreviewRunning = false; 
        mCamera.release(); 

        try{ 
         BitmapFactory.Options opts = new BitmapFactory.Options(); 
         Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts); 
         bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false); 
         int width = bitmap.getWidth(); 
         int height = bitmap.getHeight(); 
         int newWidth = 300; 
         int newHeight = 300; 

         // calculate the scale - in this case = 0.4f 
         float scaleWidth = ((float) newWidth)/width; 
         float scaleHeight = ((float) newHeight)/height; 

         // createa matrix for the manipulation 
         Matrix matrix = new Matrix(); 
         // resize the bit map 
         matrix.postScale(scaleWidth, scaleHeight); 
         // rotate the Bitmap 
         matrix.postRotate(90); 
         Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
           width, height, matrix, true); 
         CaptureCameraImage.image.setImageBitmap(resizedBitmap); 

        }catch(Exception e){ 
         e.printStackTrace(); 
        } 
        //StoreByteImage(mContext, imageData, 50,"ImageName"); 
        //setResult(FOTO_MODE, mIntent); 
        setResult(585); 
        finish(); 
       }  
      } 
     }; 

     protected void onResume(){ 
      Log.e(TAG, "onResume"); 
      super.onResume(); 
     } 

     protected void onSaveInstanceState(Bundle outState){ 
      super.onSaveInstanceState(outState); 
     } 

     protected void onStop(){ 
      Log.e(TAG, "onStop"); 
      super.onStop(); 
     } 

     @TargetApi(9) 
     public void surfaceCreated(SurfaceHolder holder){ 
      Log.e(TAG, "surfaceCreated"); 
      mCamera = Camera.open(CaptureCameraImage.cameraID); 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
      Log.e(TAG, "surfaceChanged"); 

      // XXX stopPreview() will crash if preview is not running 
      if (mPreviewRunning){ 
       mCamera.stopPreview(); 
      } 

      Camera.Parameters p = mCamera.getParameters(); 
      p.setPreviewSize(300, 300); 

      if(CaptureCameraImage.cameraID == 0){ 
       String stringFlashMode = p.getFlashMode(); 
       if (stringFlashMode.equals("torch")) 
         p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode 
       else 
         p.setFlashMode("torch"); 
      } 

      mCamera.setParameters(p); 
      try{ 
       mCamera.setPreviewDisplay(holder); 
      }catch (Exception e){ 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mCamera.startPreview(); 
      mPreviewRunning = true; 
      mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      Log.e(TAG, "surfaceDestroyed"); 
      //mCamera.stopPreview(); 
      //mPreviewRunning = false; 
      //mCamera.release(); 
     } 

     private SurfaceView mSurfaceView; 
     private SurfaceHolder mSurfaceHolder; 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
     } 

    } 
+0

Возможный дубликат [Android: сохранение изображения в местоположении] (http://stackoverflow.com/questions/3844391/android-image-save-to-location) –

+0

Я уже пробовал, что не работает. – rakesh

+0

«пожалуйста, немедленно ответьте, так как это срочно» не подходит для обращения к добровольцам. Пожалуйста, изучите некоторое время, некоторое терпение и некоторое уважение. – halfer

ответ

0

Чтобы захватить изображение и сохранить его в определенной папке, вы должны:

  1. Запрос разрешения на (API 23)
  2. Запросить захват изображения
  3. Создайте папку

Прежде всего, если вы нацелены API 23, вы должны следовать за новую систему разрешений, которая запрашивает у пользователя предоставить его только тогда, когда используется в первый раз. В вашем случае вам необходимо предоставить WRITE_EXTERNAL_STORAGE.

boolean hasPermission = (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); 

    if (!hasPermission) { 
     ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
       REQUEST_WRITE_STORAGE); 
    } 

Затем вам необходимо создать неявное намерение сделать снимок. Приложение камеры может отображаться в приложении выбора или автоматически выбираться в зависимости от пользовательских настроек и установленных приложений.

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); // final int = 1 

Наконец, вам необходимо создать папку и указать дополнительный вывод, чтобы Android знал, где сохранить изображение.

//Intent i = new intent... 

        long timestamp = System.currentTimeMillis(); 

        File file = new File(""); 

         file = new File(Environment.getExternalStorageDirectory() 
          + File.separator 
          + "DCIM" 
          + File.separator 
          + address 
          + File.separator 
          , "IMG_" + String.valueOf(timestamp) + ".jpg"); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 

//startActivityForResult... 

Существует много возможностей для хранения. Вы можете посмотреть здесь: https://developer.android.com/training/basics/data-storage/files.html

Я не сделал ничего особенного в методе обратного вызова onActivityResult. Я показываю только тост, чтобы подтвердить, что изображение успешно сохранено. Весь код, приведенный выше, находится в onClickListener imageView в моем случае.

Смежные вопросы