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)
但它仍然显示更大并且没有布局.
这段代码有什么问题?
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)
事实证明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)
归档时间: |
|
查看次数: |
8413 次 |
最近记录: |