我正在制作媒体播放器应用程序,并希望加载专辑图像以在ListView中显示。现在它可以很好地处理我从last.fm自动下载的图像,这些图像在500x500 png以下。不过,我最近添加了另一个面板到我的应用程序,允许查看全屏幕作品,所以我已经用一些大的(1024x1024)PNG取代了我的一些作品。以缩略图加载许多大型位图图像 - Android
现在,当我滚动多个具有高分辨率图形的相册时,我的BitmapFactory上出现java.lang.OutOfMemoryError。
static public Bitmap getAlbumArtFromCache(String artist, String album, Context c)
{
Bitmap artwork = null;
File dirfile = new File(SourceListOperations.getAlbumArtPath(c));
dirfile.mkdirs();
String artfilepath = SourceListOperations.getAlbumArtPath(c) + File.separator + SourceListOperations.makeFilename(artist) + "_" + SourceListOperations.makeFilename(album) + ".png";
File infile = new File(artfilepath);
try
{
artwork = BitmapFactory.decodeFile(infile.getAbsolutePath());
}catch(Exception e){}
if(artwork == null)
{
try
{
artwork = BitmapFactory.decodeResource(c.getResources(), R.drawable.icon);
}catch(Exception ex){}
}
return artwork;
}
有什么我可以添加到限制所产生的位图对象的大小来说,256x256?这就是缩略图需要做的更大的工作,我可以制作一个重复的函数或参数来获取全尺寸图形以显示全屏。
另外,我正在将这些位图显示在小图像上,大约150x150到200x200。较小的图像比较大的图像比较好。是否有任何方法可以应用缩小过滤器来平滑图像(也许是抗锯齿)?如果我不需要,我不想缓存一堆其他缩略图文件,因为这会使管理图片图像变得更加困难(目前您只需在目录中转储新的缩略图文件,并且它们将在下次自动使用他们得到加载)。
完整的代码位于src/com/calcprogrammer1/calctunes/AlbumArtManager.java中的http://github.org/CalcProgrammer1/CalcTunes,尽管其他函数没有多少区别(如果图像丢失,可以返回检查last.fm)。
使用懒惰列表或通用图像加载程序。随着这个http://developer.android.com/training/improving-layouts/smooth-scrolling.html。 Lazy List和UIL加载缩小版的位图。 http://stackoverflow.com/questions/15621936/whats-lazylist – Raghunandan 2013-05-05 09:56:24