调整BitmapFactory.decodeByteArray()生成的图像大小

时间:2012-06-08 18:44:17

标签: android image-resizing bitmapfactory

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

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

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

但它仍然显示更大并且没有布局。

这段代码有什么问题?

3 个答案:

答案 0 :(得分: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);       

答案 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);