2013-09-27 5 views
0

Я искал способ эффективного изменения размера изображения, избегая «OutOfMemory». Чтобы сделать это, я попробовал этот метод: http://developer.android.com/training/displaying-bitmaps/index.html Чтобы использовать эти методы, которые я должен иметь растяжимую идентификатор, поэтому я создаю рисую так:Как получить идентификационный номер?

Drawable image = Drawable.createFromPath(pathName); 

И теперь я не знаю, как получить идентификатор. Метод getIdentifier() подразумевает, что вы можете присвоить имя, но я hav'nt.

+0

для чего нужен ypu ID? – pskink

+0

Мне нужен ID для использования mehod: BitmapFactory.decodeResource (res, drawableID, options); – Maxime

+0

@Maxime: Не можете ли вы напрямую получить идентификатор R.drawable.yourImageName? – epiphany27

ответ

0

Для того, чтобы использовать эти методы я должен иметь растяжимую идентификатор, так что создать подобное Drawable:

Drawable изображение = Drawable.createFromPath (PathName);

Первое, что вам не нужно создавать. Во-вторых, если у вас нет изображения в вашей вытяжке папке, то и не должны использовать

BitmapFactory.decodeResource(res, resId, options) 

BitmapFactory также другие методы, такие как

BitmapFactory.decodeFile (String filePath, options); //it takes your image filepath 
(in case your image is in Sdcard) as a string. 
or, 
BitmapFactory.decodeStream (InputStream, options); // if the image is placed in your asset folder instead of drawables. 
0

Спасибо за ваши ответы. Я, наконец, выбрал этот метод для изменения размеров изображений:

private void resizeBitmap(String path) { 
     Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     int sampleSize = 0; 
     boolean done = false; 
     Bitmap source = null; 
     while (!done) { 
      options.inJustDecodeBounds = false; 
      sampleSize++; 
      try { 
       options.inSampleSize = sampleSize; 
       source = BitmapFactory.decodeFile(path, options); 
       done = true; 
      } catch (OutOfMemoryError e) { 

      } 
      if (sampleSize > 20) { 
       // Exit to avoid infinite loop 
       done = true; 
      } 
     } 
     if (source != null) { 
      try { 
       FileOutputStream out = new FileOutputStream(path); 
       source.compress(Bitmap.CompressFormat.JPEG, 90, out); 
       out.close(); 
      } catch (Exception e) { 
       Log.e("RESIZE PICTURE", "Unable to resize picture after download : "+e.getMessage()); 
      } 
     } 
    } 
Смежные вопросы