Создать подмножество растровых изображений без создания копии

1

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

first_data = Bitmap.createBitmap(data, 0, 0, data.getWidth() / 2,data.getHeight()); 
second_data =  Bitmap.createBitmap(data, data.getWidth() / 2, 0, data.getWidth() / 2, 
data.getHeight() ); 

Я встречаю OutOfMemoryException...

Если я использую только исходное полное изображение, я не отвечаю этим проблемам, я думаю, что Bitmap.createBitmap() сделает копию исходного первого изображения. Есть способ указать, что я НЕ ХОЧУ сделать копию этого? Большое спасибо!

  • 0
    Проверьте ширину и высоту в отладчике. Похоже, вы пропускаете слишком большие поддельные ценности.
  • 0
    Я думаю, что это работает правильно, у меня есть эти проблемы только в HTC Magic, если я попробую этот код в Samsung Galaxy S, все в порядке.
Теги:

1 ответ

1
Лучший ответ

К сожалению, это выглядит так:

  • BitMap.createBitmap() Подпись, которую вы используете, - это правильный способ "подмножества" растрового изображения
  • тот же метод контракт позволяет ему либо возвращать представление по тем же байтам или для их копирования

Если ваше исходное растровое изображение было неизменным (isMutable() == false), это дало бы некоторую поддержку тому, чтобы он возвращал объект на основе одного и того же массива байтов, а не копировал его.

Чтобы получить неизменяемое растровое изображение, вы можете попробовать createBitmap (Bitmap) и отбросить все ссылки на оригинал (и/или использовать recycle())?

  • 0
    Спасибо за ваш ответ, Дэвид, моя битовая карта загружается с помощью асинхронной задачи, и она не изменяема: я проверил это с помощью Log.d (..). Но существуют методы для проверки, скопировано ли изображение или нет? Я знаю, что растровые изображения размещаются в собственной куче, но как я могу увидеть состояние собственной кучи (свободна, выделена, использована) и как освободить свою битовую карту? Я должен установить нулевой указатель только? Большое спасибо
  • 0
    См. Bitmap.recycle () и различные методы в java.lang.System.getRuntime () на developer.android.com/reference/java/lang/Runtime.html.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню