4

我正在创建音频播放器,我想向播放器显示歌曲封面,它使用小图像但如果 mp3 文件有大图像,那么它会超出布局视图。我正在使用以下代码将图像大小调整为 300x300:

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

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

但它仍然显示更大并且超出布局。

这段代码有什么问题?

4

3 回答 3

8

事实证明,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));
于 2012-09-19T13:28:50.013 回答
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);       
于 2012-06-09T03:25:53.103 回答
0

你可以使用属性 Bitmap

Bitmap bitmap = Bitmap.createScaledBitmap(image, (int)x, (int)y, true);
于 2015-12-23T22:31:18.967 回答