2013-12-21 2 views
0

Я пробовал разные вещи, и я могу сохранить фотографию на SD-карте, сделанной с помощью камеры (не намеренной), но не могу получить эту же картинку с SD-карты и поместить ее в ImageView. Исключение всегда.Отображение фотографии с SD-карты на ImageView

Не знаю, чего не хватает, надеюсь, кто-нибудь может мне помочь:

PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
     // Save the image JPEG data to the SD card 
     FileOutputStream fos = null; 
     String fileName = ""; 
     try { 
      fileName = "/mnt/sdcard/DCIM/MyPicture.jpg"; 
      fos = new FileOutputStream(fileName); 
      fos.write(data); 

      fos.close(); 
      Toast.makeText(getBaseContext(), "Image saved:" , 
        Toast.LENGTH_LONG).show(); 
     } catch (FileNotFoundException e) { 
      Log.e(TAG, "File Note Found", e); 
      Toast.makeText(getBaseContext(), "Image couldn't be saved.", 
        Toast.LENGTH_LONG).show(); 
     } catch (IOException e) { 
      Log.e(TAG, "IO Exception", e); 
      Toast.makeText(getBaseContext(), "Image couldn't be saved.", 
        Toast.LENGTH_LONG).show(); 
     } 
     Bitmap bitmap = BitmapFactory.decodeFile(fileName); 
     Log.d(TAG, fileName); 
     mImageView.setImageBitmap(bitmap); 
    } 
}; 

Я попытался это тоже:

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

Это экономит изображение, но идет в улове при попытке поставить изображение в ImageView говоря, что "Ошибка чтения файла"

LogCat: enter image description here

DDMS: enter image description here

К сожалению, все для головной боли ... Я забыл положить mImageView = (ImageView) findViewById (R.id.imageView1);

Я бедствие :-)

+0

использовать имя файла как String path = Environment.getExternalStorageDirectory(). ToString() + "/ DCIM/MyPicture.jpg"; –

+0

все еще не работает – Chris

+0

вставьте свой логарифт здесь. –

ответ

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()); 
     } 

также проверить ImageView mImageView инициализируется или не

+0

Было ли такое же сообщение «Файл не найден» – Chris

+0

, вы указали правильный путь к файлу? – SathishKumar

+0

Yep: /mnt/sdcard/DCIM/MyPhoto.jpg – Chris

0

Используйте это. Это поможет вам.

public class LoadImagesFromSDCard extends AsyncTask<String, Void, Void> { 

    private ProgressDialog Dialog = new ProgressDialog(CameraPhotoCapture.this); 

    Bitmap mBitmap; 

    protected void onPreExecute() { 
     /****** NOTE: You can call UI Element here. *****/ 

     //UI Element 
     Dialog.setMessage("Loading image from Sdcard.."); 
     Dialog.show(); 
    } 

    // Call after onPreExecute method 
    protected Void doInBackground(String... urls) { 

     Bitmap bitmap = null; 
     Bitmap newBitmap = null; 
     Uri uri = null;  


      try { 

       /** Uri.withAppendedPath Method Description 
       * Parameters 
       * baseUri Uri to append path segment to 
       * pathSegment encoded path segment to append 
       * Returns 
       * a new Uri based on baseUri with the given segment appended to the path 
       */ 

       uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + urls[0]); 

       /************** Decode an input stream into a bitmap. *********/ 
       bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); 

       if (bitmap != null) { 

        /********* Creates a new bitmap, scaled from an existing bitmap. ***********/ 

        newBitmap = Bitmap.createScaledBitmap(bitmap, 170, 170, true); 

        bitmap.recycle(); 

        if (newBitmap != null) { 

         mBitmap = newBitmap; 
        } 
       } 
      } catch (IOException e) { 
       //Error fetching image, try to recover 

       /********* Cancel execution of this task. **********/ 
       cancel(true); 
      } 

     return null; 
    } 

    protected void onPostExecute(Void unused) { 

     // NOTE: You can call UI Element here. 

     // Close progress dialog 
     Dialog.dismiss(); 

     if(mBitmap != null) 
      showImg.setImageBitmap(mBitmap); 
    } 
} 
+0

Извините, я не знаю, как применить это :-( – Chris

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