Простая смена ImageView в Android - PullRequest
0 голосов
/ 03 апреля 2012

Я новичок в этом :) Я пытаюсь загрузить изображение из SDCard в ImageView таким образом:

b_picture.setOnClickListener(new OnClickListener() {
    public void onClick(View v)  {
        Intent intent =  new Intent(Intent.ACTION_PICK,
                               MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(intent, 0);
    }
});

Здесь я пытаюсь получить изображение и изменить ImageView:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     Bitmap bm = (Bitmap) data.getExtras().get("data");
     iv_picture.setImageBitmap(bm);     
}

И я получаю это от logcat:

Failure delivering result ResultInfo {who=null, request=0, result=-1, 
            data=Intent { dat=content://media/external/images/media/2 

Я не могу решить эту проблему.Вы можете мне помочь?Благодарю.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Данные, связанные с вашим возвращенным Намерением, не являются растровыми. Это URI, который вы можете использовать для поиска в MediaStore ContentProvider, чтобы получить нужное изображение. :)

Вы можете найти наиболее работающий пример на этот вопрос .

Редактировать : развернуть:

Когда вы уходите и запрашиваете MediaStore изображение, оно не возвращает вам фактическое изображение. Он возвращает вам URI, который вы можете использовать для поиска изображения. Вот как вы переводите этот URI в реальное изображение:

Ваш URI - content://media/external/images/media/2 согласно сообщению об ошибке.

Итак, мы в основном создадим запрос и запустим его на MediaStore ContentProvider, который является базой данных изображений. Передайте этот URI в эту функцию:

public Bitmap loadFullImage( Context context, Uri photoUri  ) {
    Cursor photoCursor = null;

    try {
        // Attempt to fetch asset filename for image

        // DATA is the column name in the database for the filename of the image
        String[] projection = { MediaStore.Images.Media.DATA };

        // use the URI you were given in order to look up the right image,
        // and get a Cursor object that will iterate over the matching rows in the 
        // database.
        photoCursor = context.getContentResolver().query( photoUri, 
                                                projection, null, null, null );

        // since we only care about one image...
        if ( photoCursor != null && photoCursor.getCount() == 1 ) {

            // go to the first row that was returned
            photoCursor.moveToFirst();

            // get the string in the DATA column at that row
            String photoFilePath = photoCursor.getString(
                photoCursor.getColumnIndex(MediaStore.Images.Media.DATA) );

            // Load image from path
            return BitmapFactory.decodeFile( photoFilePath, null );
        }
    } finally {

        // close up the cursor
        if ( photoCursor != null ) {
            photoCursor.close();
        }
    }

    return null;
}
0 голосов
/ 03 апреля 2012

// путь например: /sdcard/myimage.png

String imageInSD = "Your image path here"; 
BitmapFactory.Options bOptions = new BitmapFactory.Options();
bOptions.inTempStorage = new byte[16*1024];

bitmap = BitmapFactory.decodeFile(imageInSD,bOptions);

imageView.setImageBitmap(bitmap);
...