将图像保存到SD卡,然后在imageview中显示

时间:2014-05-02 03:48:25

标签: android camera imageview

UPDATE !!

所以Lokesh让我走上正确的道路,并告诉我问题是文件的大小太大而无法在imageview中显示。我能够使用onActivityResult下的以下代码修复imageview预览问题:

try {
                    Bitmap picture = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/td01.png");
                    int nh = (int) ( picture.getHeight() * (512.0 / picture.getWidth()) );
                    Bitmap scaled = Bitmap.createScaledBitmap(picture, 512, nh, true);
                    Log.v("Path", Environment.getExternalStorageDirectory().getPath()+"/td01.png");    
                    pic1.setImageBitmap(scaled);
                } catch (Exception e) {
                    Log.e("Error reading file", e.toString());
                }

谢谢Lokesh!

-----------------本行以下的原始问题-------------------

所以我试图将图像保存到SD卡以供以后使用,并在图像视图中显示保存的图像,该图像视图也用作拍摄照片的按钮。这是代码:

  pic1.setOnClickListener(new OnClickListener() {
                  public void onClick(View v) {
                      Intent camera_intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                      File image1 = new File(Environment.getExternalStorageDirectory(),"td01.png");
                      camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image1));
                      startActivityForResult(camera_intent, CAMERA_PIC_REQUEST1);
                              }
                });

接下来是:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch(requestCode){
        case 1:
            if(resultCode==RESULT_OK){
                  Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
                  pic1.setImageBitmap(thumbnail);
                }
        }

现在,如果我从onclick中删除以下代码,它会显示我期望的缩略图:

File image1 = new File(Environment.getExternalStorageDirectory(),"td01.png");
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image1));

...但没有该代码,它不会将文件保存到我的SD卡。

问题是,如果我不删除该代码,它会将图像保存到我的SD卡,但在相机活动中点击SAVE后返回活动之前会立即崩溃,除非我从onActivityResult中删除以下代码:

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
pic1.setImageBitmap(thumbnail);

我还在onActivityResult中尝试了以下代码的许多变体,希望以不同的方式从实际文件中显示它,但它永远不会工作,只显示空白的imageview,但至少在这种情况下崩溃不会发生,因为我删除了获取额外的数据代码:

Bitmap photo1 = BitmapFactory.decodeFile("/sdcard/td01.png");
pic1.setImageBitmap(photo1);

我几天都在苦苦挣扎,在这里不知所措。希望有人可以告诉我我做错了什么愚蠢的事情并解释为什么这不起作用。

谢谢!

2 个答案:

答案 0 :(得分:0)

请勿直接访问SD卡,尝试通过Environment访问此卡

String imageDir = Environment.getExternalStorageDirectory()+"/apple.jpg";

然后你可以调用BitmapFactory:

Bitmap myBitmap = BitmapFactory.decodeFile(imageDir);

答案 1 :(得分:0)

试试这个:

try {
            Bitmap picture = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+"/DCIM/MyPhoto.jpg");
            Log.v("Path", Environment.getExternalStorageDirectory().getPath()+"/DCIM/MyPhoto.jpg");
            mImageView.setImageBitmap(picture);
        } catch (Exception e) {
            Log.e("Error reading file", e.toString());
        }