Przekazanie bitmapy do innego Activity

0

Witam serdecznie ! :P
Po kliknięciu w button odpalam Camere w aparacie, robię zdjęcie, a następnie wrzucam do ImageView i wszystko jest ok, zdjęcie się wyświetla. Problem pojawia się wtedy gdy chcę przekazać Bitmapę do innego Activity. Jeśli chcę coś przekazać w Bundle, jest ok, ale od razu jak wrzucam BitMapę do putExtra nie dzieje się nic, aplikacja działa dalej i nie odpala nowego Activity. Wpadłem, więc na pomysł żeby przerabiać bitmapę na Stringa i wysłać go Bundlem, a tu znowu problem przy bitmap.compress wywala się aplikacja.
Nie mam już pomysłu, nie wiem co zrobić. Problemem jest to, że robię to w onActivityResult() ?
Kod:

public void savePicture(){
		Calendar cal = Calendar.getInstance();
		File file = new File(Environment.getExternalStorageDirectory(),  (cal.getTimeInMillis()+".jpg"));
		    if(!file.exists()){
		    try {
		        file.createNewFile();
		    } catch (IOException e) {
		    // TODO Auto-generated catch block
		        e.printStackTrace();
		    }
		    }else{
		       file.delete();
		    try {
		       file.createNewFile();
		    } catch (IOException e) {
		    // TODO Auto-generated catch block
		        e.printStackTrace();
		    }
		    }
		    capturedImageUri = Uri.fromFile(file);
		    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
		    i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
		    startActivityForResult(i, CAMERA_PIC_REQUEST);
		      
	}
	
	
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
	    if (requestCode == CAMERA_PIC_REQUEST) {  
	        try {
	    Bitmap bitmap = MediaStore.Images.Media.getBitmap( getApplicationContext().getContentResolver(),  capturedImageUri);

	    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
	    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
	    byte[] byteArray = byteArrayOutputStream .toByteArray();

	    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
	    
	    
	    Bundle koszyk = new Bundle();
		koszyk.putString("path", encoded);
		Intent startActivityPhotoAdd = new Intent(this, PhotoAddActivity.class);
		startActivityPhotoAdd.putExtras(koszyk);
        startActivity(startActivityPhotoAdd);

W przypadku od razu wrzucając BitMapę:

		Intent startActivityPhotoAdd = new Intent(MainActivity.this, PhotoAddActivity.class);
		startActivityPhotoAdd.putExtra("BitmapImage", bitmap);
        startActivity(startActivityPhotoAdd);

Odebranie:

Intent intent = getIntent();
			Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
			
        	ImageView image = (ImageView) findViewById(R.id.imageViewNewPhoto);

Dodam, że zrobiłem ImageView z obrazkiem Androida, przerobiłem go na Bitmapę, a następnie na Stringa. Także kod wydaję się być w porządku, bitmapa ze zdjęcia z telefonu ma jakiś problem =/

1

Jeśli zapisujesz bitmapę na dysku to po co przekazywać ją do innej aktywności? Nie lepiej przekazać np nazwę pliku i w innej aktywności wczytać bitmapę z pliku?

0

Jakoś uparłem się na tą BitMapę, jasne można tak zrobić i tak zrobiłem :P Dzięki jak zwykle!
A co do compressora to zdjęcie jest zbyt duże i dlatego się wywala. Musiałem zmniejszyć rozdzielczość. Hmm na przyszłość coś z tym będzie trzeba zrobić.

0

Generalnie Bitmapa implementuje interfejs Parcelable, zatem powinna być możliwość przekazywania jej w Bundle. Jednakże nie jest to dobra praktyka, zwłaszcza jak ma spory rozmiar. Wczytanie z pliku w tym przypadku będzie najlepszym wyjściem IMO.

1 użytkowników online, w tym zalogowanych: 0, gości: 1