2013-06-04 30 views
7

wiem jak dostać zdjęcie z galerii w Androidwybierz miniaturę z Android galerii

Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(gallery, PHOTO_REQUEST_CODE); 

Ale jak bym specjalnie wybrać miniaturkę?

POWÓD BOUNTY:

Próbowałem już oba rozwiązania w Get thumbnail Uri/path of the image stored in sd card + android. Nie działają dla mnie. Nie wiem jak dostać selectedImageUri, który jest typu long, z data w

onActivityResult(int requestCode, int resultCode, Intent data) 
+1

Możliwy duplikat [Uzyskaj miniaturkę Uri/ścieżkę obrazu zapisaną na karcie SD + Android] (http://stackoverflow.com/questions/5548645/get-thumb -uri-path- z-obrazu-zapisanego-w-sd-card-android) –

+0

@MiroMarkarian dzięki za link. Ale ja otrzymuję błędy podczas korzystania 'Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail ( \t \t \t \t getContentResolver(), data.getData(), \t \t \t \t MediaStore.Images.Thumbnails.MINI_KIND, \t \t \t \t (BitmapFactory.Options) null); '. W jaki sposób zmienić 'data.getData()' na id zgodnie z sugestią w odpowiedzi? –

+0

Spróbuj użyć 'Kursora'. Jest to drugie rozwiązanie zaproponowane przez faceta i donoszono, że działa ono lepiej niż opcja 'Bitmap'. –

Odpowiedz

0
String fn = ...; // file name 
ContentResolver cr = ctx.getContentResolver(); 
Cursor c = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      new String[]{ 
       BaseColumns._ID 
      }, MediaColumns.DATA + "=?", new String[]{ fn }, null); 
    if(c!=null) { 
     try{ 
      if(c.moveToNext()) { 
       long id = c.getLong(0); 
       Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MINI_KIND, null); 
      } 
     }finally{ 
      c.close(); 
     } 
    } 
0

Jeśli masz swój kursor w ręku, można uzyskać swój identyfikator jak

int id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.MediaColumns._ID)); 

reffer następujący kod

Cursor cursor = context.getContentResolver().query(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       new String[] { MediaStore.Images.Media._ID }, 
       MediaStore.Images.Media.DATA + "=? ", 
       new String[] { filePath }, null); 

     if (cursor != null && cursor.moveToFirst()) { 
      int id = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.MediaColumns._ID)); 
      Uri baseUri = Uri.parse("content://media/external/images/media"); 
      return Uri.withAppendedPath(baseUri, "" + id); 

Tak na miniaturkę,

Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cursor, id, MediaStore.Images.Thumbnails.MINI_KIND, null); 
0

Hej, więc jeśli wszystko inne nie działa dla ciebie, jest to łatwy sposób na zrobienie własnej miniatury, jeśli masz Bitmapę. Jeśli nie wiesz jak załadować bitmapę z Uri:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 

Oto kod, aby miły sformatowany miniatur:

 final int THUMBNAIL_HEIGHT = 75;//48 
     final int THUMBNAIL_WIDTH = 75;//66 
     Float width = new Float(bitmap.getWidth()); 
     Float height = new Float(bitmap.getHeight()); 
     Float ratio = width/height; 
     bitmap = Bitmap.createScaledBitmap(bitmap, (int)(THUMBNAIL_HEIGHT*ratio), THUMBNAIL_HEIGHT, false); 

     int padding = (THUMBNAIL_WIDTH - bitmap.getWidth())/2; 
     image.setPadding(padding, padding, padding, padding); 
     image.setBackgroundColor(0); 
     image.setImageBitmap(bitmap); 

w tym kodzie „obraz” jest zmienna dla ImageView. Mam nadzieję, że to pomoże: D