как сохранить захваченное изображение на SD-карту?

Я хочу использовать камеру по умолчанию и захватить изображение. я хочу сохранить изображение в sdcard/photofolder/ и сохранить имя файла в формате текущего времени в sdcard/photofolder/, а также отобразить захваченное изображение на странице просмотра изображений

Uri outputFileUri = Uri.fromFile("/sdcard/Photofolder/");    
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, CAMERA_REQUEST);

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (requestCode == CAMERA_REQUEST) {  
                Bitmap photo = (Bitmap) data.getExtras().get("data"); 
               // imageView.setImageBitmap(photo);

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 4;
                Bitmap bitmap = BitmapFactory.decodeFile(picFileName, options);
                imageView.setImageBitmap(bitmap);
                imageView.setVisibility(View.VISIBLE);

            }  
        }

есть идеи по этому поводу?? заранее спасибо


person ckpatel    schedule 30.08.2012    source источник
comment
Каковы значения outputFileUri?   -  person user370305    schedule 30.08.2012
comment
найти ответ на этот вопрос изображение, которое хранится внутри"> stackoverflow.com/questions/12179045/ ..   -  person user370305    schedule 30.08.2012
comment
Будьте умны ... Посмотрите на мой комментарий выше .. Ваш ответ на вопрос OP ...   -  person user370305    schedule 30.08.2012


Ответы (6)


Вы можете получить путь SDCard, например..

String root = Environment.getExternalStorageDirectory().toString();

new File(root + "/photofolder").mkdirs();

Затем вы можете сохранить файл в root + "/photofolder/20120830025700.jpg".


Вы запросили разрешение на запись на SD-карту? Добавьте следующую строку в манифест вашего приложения:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
person Max M.    schedule 30.08.2012

В качестве примера приведен здесь попробуйте этот код...

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File output = new File(dir,"camera.png");

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(output));
String path =output.getAbsolutePath();
startActivityForResult(cameraIntent, TAKE_PHOTO);

путь вернет местоположение вашего изображения в SD-карте

person MAC    schedule 30.08.2012

Используйте этот код, чтобы сохранить изображение на SD-карту, а также создать каталог для хранения захваченного изображения.

  File photo = new File(Environment.getExternalStorageDirectory()+"/photofolder"); 
  System.out.println(photo.toString());
  boolean success = false;
  if(!photo.exists())
  { 
    success = photo.mkdirs(); 
  } 
    if(!success)
      {   

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       photo = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android/data/"+getApplicationContext().getPackageName()+"/files/Receipt", imagename+".png");
       Toast.makeText(this, photo.toString(), Toast.LENGTH_LONG);
       intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photo));
       Uri imageurl = Uri.fromFile(photo);  
       startActivityForResult(intent, CAMERA_RECEIPTREQUEST);   
       }  

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

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
     super.onActivityResult(requestCode, resultCode, data);  

     switch(requestCode)
     {
     case CAMERA_RECEIPTREQUEST:  
         if(resultCode== Activity.RESULT_OK)
         {
             if(data!=null)   
                 { 
                         BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 8;
                 ImageView jpgView = (ImageView)findViewById(R.id.imageView1);
                 Bitmap receipt = BitmapFactory.decodeFile(photo.toString(),options);  
                  jpgView.setImage(receipt);
 }
 }
 }
person vinothp    schedule 30.08.2012

Попробуй это

private void cameraOn() {
            tempUri = "sdcard/......";
        i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
        startActivityForResult(i, cameraData);
    }

Чтобы получить растровое изображение

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case cameraData:
            if (resultCode == RESULT_OK) {
                Bitmap bmp = BitmapFactory.decodeFile(tempUri.getPath(), null);
                imageShow.setImageBitmap(bmp);
            } 
            break;
        }
    }
person Sieryuu    schedule 30.08.2012

попробуйте использовать это в onActivityResult()

setupImage(photo);

а также

public Bitmap setupImage(Intent data) { 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = SAMPLE_SIZE;     // SAMPLE_SIZE = 2 

      Bitmap tempBitmap = null; 
      Bitmap bm = null; 
      try { 
       tempBitmap = (Bitmap) data.getExtras().get("data");
        bm = tempBitmap; 

        Log.v("ManageImage-hero", "the data.getData seems to be valid"); 

        FileOutputStream out = new FileOutputStream(outputFileUri.getPath()); 
        tempBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      } catch (NullPointerException ex) { 
        Log.v("ManageImage-other", "another phone type"); 
        bm = otherImageProcessing(options); 
      } catch(Exception e) { 
        Log.v("ManageImage-setupImage", "problem setting up the image"+e); 
      } 

      return bm; 
    } 
private Bitmap otherImageProcessing(BitmapFactory.Options options) { 
      Bitmap bm = null; 

      try { 
        FileInputStream fis = new FileInputStream(outputFileUri.getPath()); 
        BufferedInputStream bis = new BufferedInputStream(fis); 
        bm = BitmapFactory.decodeStream(bis, null, options); 

        // cleaning up 
        fis.close(); 
        bis.close(); 
      } catch(Exception e) { 
        Log.e("ManageImage-otherImageProcessing", "Cannot load image", e); 
      } 

      return bm; 
    } 
person G_S    schedule 30.08.2012

ниже код может помочь вам

    private void takePicture() 
        {   cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, IMAGE_CAPTURE);
        }

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) {   
     File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
     File output = new File(dir, "camerascript.png");
     }  
}
person Hardik Nadiyapara    schedule 30.08.2012
comment
спасибо, брат, но я хочу сохранить изображение в sdcard/photofolder/ и сохранить изображение в формате текущего времени, например, sdcard/photofolder/20120830025700.jpg - person ckpatel; 30.08.2012