2017-02-12 24 views
0

Я пытаюсь загрузить ресурс в растровое изображение по позиции изображения в галерее. Я получаю правильный текст на «drawableId», но когда он установлен в строку и ссылку в Растровая строка кода вызывает ошибку с «a» в этой строке кода Bitmap b = BitmapFactory.decodeResource(getResources(), a).Как получить переменную ресурса из строки для bitmapFactory

Если я заменяю aR.drawable.pg1, он отлично работает.

String a = drawableId.getText().toString();   
Bitmap b = BitmapFactory.decodeResource(getResources(), a); 
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      postPicture(); 
     } 

     public boolean postPicture() { 
      String a = drawableId.getText().toString(); 

      Bitmap b = BitmapFactory.decodeResource(getResources(), (a)); 
      Intent share = new Intent(Intent.ACTION_SEND); 
      share.setType("image/*"); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg"); 
      try { 
       f.createNewFile(); 
       FileOutputStream fo = new FileOutputStream(f); 
       fo.write(bytes.toByteArray()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/temporary_file.jpg")); 
      startActivity(Intent.createChooser(share, "Share image File")); 

Любые идеи о том, как решить эту проблему? Заранее спасибо!

+0

вы должны проверить документы. второй требуемый параметр - это int, который является идентификатором ресурса, а не строкой. поэтому этот ** R.drawable.pg1 ** должен работать нормально – Raghunandan

+0

[decodeResource] (https://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeResource (android.content.res.Resources,% 20int)) принимает int как второй параметр, а не строку. Вы действительно должны прочитать сообщение об ошибке –

+0

https://stackoverflow.com/a/38447612/115145 – CommonsWare

ответ

0

Для других попробовать это:

int id = getResources().getIdentifier(a, "id", getPackageName()); 
Drawable drawable = getResources().getDrawable(id); 

Bitmap b = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); 
Canvas canvas = new Canvas(b); 
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
drawable.draw(canvas); 

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

  • Нет связанных вопросов^_^