2012-06-08 3 views
4

Я создаю аудиоплеер, я хочу показать обложку песни для проигрывателя, она работает с небольшим изображением, но если у mp3-файла есть большое изображение, то оно выходит из вида макета. Я повторно проклейки изображение для 300x300, используя код ниже:Изменение размера изображения, созданного с помощью BitmapFactory.decodeByteArray()

BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inDensity = 300; 
opt.inTargetDensity = 300; 

songCoverView.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length, opt)); 

Но она по-прежнему показывает больше и выходит из макета.

С этим кодом?

ответ

7

попробовать Bitmap.createScaledBitmap

bitmap = Bitmap.createScaledBitmap(songCover, 300, 300, true);

И вы можете сохранить тот же формат для старого образа ... Я использую следующую логику:

 int width = songCover.getWidth(); 
     int height = songCover.getHeight(); 
     float scaleHeight = (float)height/(float)300; 
     float scaleWidth = (float)width /(float)300; 
     if (scaleWidth < scaleHeight) scale = scaleHeight; 
     else       scale = scaleWidth; 

     bitmap = Bitmap.createScaledBitmap(songCover, (int)(width/scale), (int)(height/scale), true);  
+0

но, изображение выглядит вынуждено, что пиксели, если масштаб изображения не 1: 1. Для образца, например, в html имеют максимальную ширину и максимальную высоту. –

+1

@MuhammadResnaRizkiPratama, я добавил пример ответа, чтобы показать вам, как сохранить старое соотношение сторон. –

+0

эй .. спасибо .. Это то, что мне нужно .. :) –

7

Оказывается, что есть ошибка в Android: decodeByteArray каким-то образом игнорирует некоторые параметры ввода. Известный обходной путь использует decodeStream с входным массивом, завернутым в ByteArrayInputStream вместо этого, как это:

BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inDensity = 300; 
opt.inTargetDensity = 300; 

songCoverView.setImageBitmap(BitmapFactory.decodeStream(new ByteArrayInputStream(songConver), null, opt)); 
+0

Пример кода на самом деле использовал decodeByteArray - это была моя ошибка, очевидно. Исправлено. – Argentumko

0

вы можете использовать свойство битмап

Bitmap bitmap = Bitmap.createScaledBitmap(image, (int)x, (int)y, true);