2015-06-23 2 views
0

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

public boolean launchCamera(View view) { 

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     File photo; 
     try { 
      // place where to store camera taken picture 
      photo = this.createTemporaryFile("picture", ".jpg"); 
      photo.delete(); 
     } catch (Exception e) { 
      Log.v(TAG, "Can't create file to take picture!"); 
      Toast.makeText(MainActivity.this, "Please check SD card! Image shot is impossible!", Toast.LENGTH_LONG); 
      return false; 
     } 
     mImageUri = Uri.fromFile(photo); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 
     //start camera intent 
     this.startActivityForResult(intent, MenuShootImage); 
     return true; 
    } 

private File createTemporaryFile(String part, String ext) throws Exception { 
     File tempDir = Environment.getExternalStorageDirectory(); 
     tempDir = new File(tempDir.getAbsolutePath() + "/.temp/"); 
     if (!tempDir.exists()) { 
      tempDir.mkdir(); 
     } 
     return File.createTempFile(part, ext, tempDir); 
    } 

public Bitmap grabImage() 
    { 
     this.getContentResolver().notifyChange(mImageUri, null); 
     ContentResolver cr = this.getContentResolver(); 
     Bitmap bitmap=null; 
     try 
     { 
      bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri); 


     } 
     catch (Exception e) 
     { 
      Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show(); 
      Log.d(TAG, "Failed to load", e); 
     } 

     return bitmap; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    { 
     Intent imagepass = null; 
     Bitmap bitmap = null; 
     if(requestCode == MenuShootImage && resultCode == RESULT_OK) 
     { 

      bitmap = this.grabImage(); 
      imagepass = new Intent(this,MainActivity2.class); 
      imagepass.putExtra("imagepass", bitmap); 
      startActivity(imagepass); 
     } 

    } 

проблема заключается в том, что я не могу добраться до другой деятельности в все, в режиме отладки, я получаю начало работы (imagepass); и не переходите к MainActivity2. Может кто-нибудь мне помочь?

+0

Вы объявляете класс MainActivity2 в файле манифеста? –

+1

Я предпочту передать пройденный путь изображения из одной активности в другую. Во втором упражнении вы можете создать Bitmap из пути изображения и можете играть с ним. – Umesh

ответ

0

1) Сначала преобразуйте изображение в массив байтов, а затем перейдите в Intent и в следующем порядке получите массив байтов из Bundle и Convert into Image (Bitmap) и установите в ImageView.

Преобразование растровых изображений в байтовый массив: -

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

Pass байтовый массив в умыслом: -

Intent intent = new Intent(this, NextActivity.class); 
intent.putExtra("picture", byteArray); 
startActivity(intent); 

Get байтовый массив из Bundle и конвертировать в растровое изображение: -

Bundle extras = getIntent().getExtras(); 
byte[] byteArray = extras.getByteArray("picture"); 


Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 
image.setImageBitmap(bmp); 

2) Сначала сохраните изображение в SDCard и в следующем порядке установите это изображение в ImageView.

3) Pass Bitmap в Намерения и получить растровое изображение в следующей операции из пучка, но проблема, если ваш размер Bitmap/Изображение большой в то время изображение не загружается в следующей деятельности

1

Прежде всего, если вы действительно хотите передать растровое изображение через Intent, вам нужно сначала преобразовать его в Byte Array, так как Bitmap не может быть привязан к Intent как это.

Вот как это сделать https://stackoverflow.com/a/11010565/4651112

Но в соответствии с лучшими практиками, я предлагаю вам не посылать BITMAP ЧЕРЕЗ НАМЕРЕНИЯХ НА ВСЕ. Отправьте изображение с именем файла и позвольте целевой операции декодировать его из файла. Это гораздо лучше.

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