我正在创建音频播放器,我想向播放器显示歌曲封面,它使用小图像,但如果mp3文件有大图像,那么它就会超出布局视图。我使用以下代码将图像重新调整为300x300:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDensity = 300;
opt.inTargetDensity = 300;
songCoverView.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length, opt));
但它仍然显示更大并且没有布局。
这段代码有什么问题?
答案 0 :(得分:7)
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);
答案 1 :(得分: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));
答案 2 :(得分:0)
您可以使用属性Bitmap
Bitmap bitmap = Bitmap.createScaledBitmap(image, (int)x, (int)y, true);