2013-07-01 2 views
1

Я пытаюсь отправить изображение m, которое выбрано галереей или камерой для другого действия, но ничего похожего не происходит, я преобразовал битмап в строку, чтобы отправить его по намерению, но кажется, что цель никогда не будет вызвана.Передача изображения из галереи в другую деятельность

Пожалуйста, помогите мне, что я делаю неправильно?

это мой onActivityResult() Код

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      Bitmap thumbnail = null; 
      if(requestCode==RESULT_LOAD_IMAGE){ 
       if(resultCode==RESULT_OK){ 

        Uri selectedImageUri = data.getData(); 
        String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
        Cursor cursor = getContentResolver().query(selectedImageUri,filePathColumn, null, null, null); 
        cursor.moveToFirst(); 
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String picturePath = cursor.getString(columnIndex); 
        cursor.close(); 
        data.getExtras().get("data"); 

        thumbnail = (BitmapFactory.decodeFile(picturePath)); 

        //CONVERT BITMAP TO STRING 
        ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
        thumbnail.compress(Bitmap.CompressFormat.PNG,100, baos); 
        byte [] b=baos.toByteArray(); 
        String temp=Base64.encodeToString(b, Base64.DEFAULT); 
         //trying to start activity... 

        Intent intent = new Intent(Home.this, Upload.class); 
        intent.putExtra("picture", temp); 
        startActivity(intent);} 

       } 
      } 

      } 

ответ

0

Я не знаю, если и нужно, чтобы превратить ваш битовый массив в объекте Струнный соблюдать определенную логику в вашей деятельности. Если это не так, то растровое преобразование -> String стало бесполезным, потому что Bitmap реализует Parcelable, поэтому вы можете передать его с помощью метода putExtra(String name, Parcelable value).

Вы можете найти код на этом link

Примере:

Отправить Намерение

Intent intent = new Intent(Home.this, Upload.class); 
intent.putExtra("picture", thumbnail); 

и извлечь его из другой деятельности

Bitmap bitmap = (Bitmap) intent.getParcelableExtra("picture"); 

Надеется, что это помогает

1

Вместо преобразования изображения в строку, почему вы не работаете с пути к файлу и перезагружаете его снова в другом действии? Я столкнулся с тем же вопросом с моим приложением Pic4Share, и я решил его таким образом.

В деятельности, которая загружает изображение из галереи:

String stringPath; 

protected void onActivityResult(int requestCode, int resultCode,Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     switch(requestCode) { 
      case SELECT_PHOTO: 
       if(resultCode == RESULT_OK){ 
        Uri selectedImage = imageReturnedIntent.getData(); 
        String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        cursor.moveToFirst(); 

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        stringPath = cursor.getString(columnIndex); // ***Here is stored the path*** 
        cursor.close(); 

        BitmapFactory.Options opts = new BitmapFactory.Options(); 
        opts.inSampleSize = 4; // for 1/2 the image to be loaded 
        opts.inPurgeable = true; 

        image.setImageBitmap(decodeSampledBitmapFromFile(txtPath, 800, 800)); 

       } 
       else{ 
        //Toast.makeText(getApplicationContext(),"Error", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    } 

Затем вы можете передать строку с путем с помощью намерения:

Intent intent = new Intent(Home.this, Upload.class); 
Bundle b = new Bundle(); 
b.putString("picture", stringPath); 
intent.putExtras(b); 
startActivity(intent); 

Наконец, в вашем другом приложении вы загружаете изображение снова по пути:

Bundle b = getIntent().getExtras(); 
String picturePath = b.getString("picture"); 
Bitmap scaledBitmap = decodeSampledBitmapFromFile(picturePath, 150, 150); 
+0

спасибо большое, но проблема решена :) Я возился с кодом и называл намерение в асинхронной задаче, и теперь он работает – Delphinium

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