Изменение размера изображения, сгенерированного BitmapFactory.decodeByteArray ()

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

BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inDensity = 300; opt.inTargetDensity = 300; songCoverView.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length, opt)); 

Но он все еще показывает больше и выходит из макета.

Что не так с этим кодом?

Попробуйте 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); 

Оказывается, в 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)); 

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

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