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

Muh*_*ama 4 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));
Run Code Online (Sandbox Code Playgroud)

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

这段代码有什么问题?

Ash*_*usa 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);       
Run Code Online (Sandbox Code Playgroud)


Vla*_*hin 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));
Run Code Online (Sandbox Code Playgroud)