2012-05-31 4 views
0

У меня есть путь к изображению, который я декодирую в растровое изображение. Я обнаружил, что этот битмап большой и попытался изменить его размер. Он не работал (изображение оставалось слишком большим), мой код хорошо?Почему мое изображение не изменяется?

ImageButton myImage = (ImageButton) findViewById(R.id.image); 

Bitmap myBitmap = BitmapFactory.decodeFile(selectedImagePath); 
Bitmap.createScaledBitmap(myBitmap, NEW_WIDTH, NEW_HEIGHT, true); 

myImage.setImageBitmap(myBitmap); 
+0

Что значит, что это не сработало? Вы получаете «Исключение» или просто остаетесь слишком большим для рамки? – Codeman

+0

Я обновил свой вопрос: он остался слишком большим. – user1420042

+0

Возможно, вам лучше обслуживать FrameLayout, а не ImageButton. Попробуйте, не изменяя ничего, и посмотрите, изменилось ли оно – Codeman

ответ

3
Bitmap myBitmap = BitmapFactory.decodeFile(selectedImagePath); 
Bitmap scaledBitmap = Bitmap.createScaledBitmap(myBitmap, NEW_WIDTH, NEW_HEIGHT, true); 
myBitmap.recycle(); 
myBitmap = null; 

Он разработан, чтобы не изменить исходное растровое изображение. Вы не фиксируете ссылку, поэтому ее просто выбросили.

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

+0

Хорошая точка, растровые изображения неизменяемы в Android – Codeman

+0

Вы можете сделать их изменчивыми. Он просто использует статический метод неправильно. Он не изменяет исходное растровое изображение. Он создает новое растровое изображение из старого. – DeeV

+0

Вы правы, ему нужно будет создать новый экземпляр растрового изображения, а не новую ссылку. – Codeman

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