2015-03-05 3 views
1

У меня проблема с отправкой изображения с изображения в другую деятельность. Мой код работает хорошо, но только для отправки изображения, указанного в коде без изменений. Я добавляю фильтры на фотографию, и мне нужно отправить изображение с этими изменениями. Это мой код:Отправить изображение с изменениями в другую деятельность Android

Первая активность:

public void send(View view) { 
    //trzeba tu coś wymyslić żeby dodawało np tag żeby wiedziec jaka obraz ma nazwe 
    //i wstawić do tego niżej 
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.i);  
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 

    Intent intent = new Intent(this, TwoActivity.class); 
    intent.putExtra("picture", b); 
    startActivity(intent); 
} 

Следующая активность:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_two); 

    Bundle extras = getIntent().getExtras(); 
    byte[] b = extras.getByteArray("picture"); 
    Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length); 
    ImageView image = (ImageView) findViewById(R.id.imageView1); 
    image.setImageBitmap(bmp); 
} 

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

+0

Просто передайте в измененном Bitmap, который вы хотите отправить на свой посыл() метод и использовать этот Bitmap вместо декодирования его из ресурсов (что будет то же самое, как неизмененный Bitmap) – Guardanis

+0

На самом деле, если это из представления, вы можете использовать кеш чертежа ... Сделать ответ для вас ... – Guardanis

ответ

1

Причина в том, что это то же самое, потому что вы передаете изображение только из ресурсов; не редактируется.

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

public void send(View view) { 
    Bitmap bitmap = getFromCache(view);  
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 

    Intent intent = new Intent(this, TwoActivity.class); 
    intent.putExtra("picture", b); 
    startActivity(intent); 
} 

private Bitmap getFromCache(View view){ 
    view.setDrawingCacheEnabled(true); 
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); // Make sure to call Bitmap.createBitmap before disabling the cache, as the Bitmap will be recycled once it is disabled again 
    view.setDrawingCacheEnabled(false); 
    return bitmap; 
} 
+0

Могу ли я использовать созданный DrawingCache во всем моем приложении или только в этом одном действии, и я должен отправить его по намерению другим ? – Quicki

+0

Вы можете сделать его статическим и вызвать этот метод из любого места, чтобы получить кэш чертежа любого вида. Просто убедитесь, что это всегда делается в потоке пользовательского интерфейса (иначе вы можете столкнуться с проблемами ConcurrentModification), и что вы отправляете только отображаемый в настоящее время вид (иначе вы можете просто получить полностью черное изображение или хороший NPE). Поэтому да, чтобы ответить на ваши вопросы: вызов этого метода в Activity A для передачи измененного изображения в Activity B (поскольку представление из Activity A, отображающее изменения, потенциально не может быть доступно в это время, активность B пытается запросить его). Намерения были бы здесь. – Guardanis

+0

Большое спасибо @Guardanis! : D – Quicki

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

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