捕获图像并将其存储到 SD 卡的新文件夹中

Posted

技术标签:

【中文标题】捕获图像并将其存储到 SD 卡的新文件夹中【英文标题】:Capture a image and store it to the SD Card in new folder 【发布时间】:2013-01-08 05:18:48 【问题描述】:

我正在调用相机并拍摄图像,我必须一张一张地拍摄 10 张图像并将它们存储在 SD 卡上,然后才能将它们设置为图像视图。请检查我下面的代码,它没有设置为图像视图。

如何将其存储在 SD 卡上并检索它以设置为图像视图?在存储之前如何命名图像?

在第一个活动中,我正在调用相机:

protected void onCreate(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mContext = this;
    init();


private void init() 
    String extStorageDirectory = Environment.getExternalStorageDirectory()
            + "/testing";

    File xmlDirectory = new File(extStorageDirectory);
    if (!xmlDirectory.exists())
        xmlDirectory.mkdirs();

    iv1 = (ImageView) findViewById(R.id.iv1);


private OnClickListener onBtnClicked = new OnClickListener() 
    @Override
    public void onClick(View v) 
        // TODO Auto-generated method stub
        switch (v.getId()) 
            case PHOTO:
                Intent selectImageIntent = new Intent(first.this,
                        second.class);
                startActivityForResult(selectImageIntent, 1);
                break;
        
    
;

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (requestCode == 1) 
        if (resultCode == RESULT_OK) 
            String result = data.getStringExtra("result");

            Log.d("*****************",
                    "inside onactivityresult in main activity=" + result);

            Bitmap bitmap = BitmapFactory.decodeFile(result);
            iv1.setImageBitmap(bitmap);
            iv1.setScaleType(ScaleType.FIT_XY);
        
    

在我的第二个活动中,我正在捕获图像并将其传递给第一个活动:

private void init() 
    picturePath = Environment.getExternalStorageDirectory() + "/Camera/"
            + "test.jpg";
    System.out.println("thumbnail path~~~~~~" + picturePath);
    File file = new File(picturePath);
    outputFileUri = Uri.fromFile(file);



public void startCamera() 
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(intent, IMAGE_CAPTURE);


protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (requestCode == IMAGE_CAPTURE) 
        if (resultCode == RESULT_OK) 
            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", picturePath);
            setResult(RESULT_OK, returnIntent);
            finish();
        
    

【问题讨论】:

【参考方案1】:

在其他方法中初始化对象不是一个好习惯。

init() 方法中删除这一行iv1 = (ImageView) findViewById(R.id.iv1); 并将您的OnCreate() 更改为Below Way。

protected void onCreate(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
//Initialize here
    iv1 = (ImageView) findViewById(R.id.iv1);

    mContext = this;
    init();


希望对你有所帮助。

【讨论】:

@cavallo:你能把你的logcat贴在这里吗? "在其他方法中初始化对象不是一个好习惯。" - 原因?想知道,因为我也在做同样的事情。【参考方案2】:

使用此代码并输入您的文件名和路径,相机将捕获图像并以给定名称存储它

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
           if (!APP_FILE_PATH_Media.exists()) 
          
               APP_FILE_PATH_Media.mkdirs();
          
         uriSavedImage =new File(APP_FILE_PATH_Media+ "/" +
                    "filename"+ ".jpeg");
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(uriSavedImage));
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 

在 onActivityResult() 中使用此代码设置 imageView

try
                 
                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 1;
                 bm = BitmapFactory.decodeFile(uriSavedImage.getAbsolutePath(), options);
                 
                 catch(Exception ee)
                 

                 

【讨论】:

以上是关于捕获图像并将其存储到 SD 卡的新文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

如何在内部存储中创建文件夹并保存捕获的图像

保存在内部存储中捕获的​​图片?

通过AsyncTask下载图像并将其显示在Imageview中而不存储在SD卡中

如何在存储 SD 卡之前裁剪捕获的图像? [复制]

从 sd 卡创建播放列表并将其发送到 Chromecast

如何从服务器下载文件并将其保存在 Android SD 卡中的特定文件夹中?