【发布时间】:2010-07-23 12:08:42
【问题描述】:
我正在尝试为每个主屏幕设置不同的壁纸,但我遇到了 OutOfMemory 问题。我有 5 个位图,我试图将其覆盖在 5 倍于显示宽度的壁纸位图上。使用下面的代码我得到 OOM。问题似乎是创建大壁纸位图的第一行代码。我的问题是是否有办法做到这一点(即某种方式占用更少的内存,或者以某种方式分配更多的内存??)。谢谢!
Bitmap wallpaper = Bitmap.createBitmap(displayWidth*5,displayHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(wallpaper);
Uri data = getIntent().getData();
Bitmap bmp = getBitmap(data, imagePosition, displayWidth, displayHeight);
canvas.drawBitmap(bmp, 0, 0,null);
WallpaperManager wallpaperManager = (WallpaperManager) SetterActivity.this.getSystemService(Context.WALLPAPER_SERVICE);
wallpaperManager.setBitmap(wallpaper);
wallpaperManager.suggestDesiredDimensions(bmp.getWidth()*2, bmp.getHeight());
【问题讨论】:
-
您的位图尺寸是多少?
-
好吧,我在 Nexus One 上进行测试,它的屏幕尺寸为 480x800。首先,我创建了 5 倍大 (2400x800) 的壁纸位图。然后对于每个主屏幕,我将在尺寸为 480x800 的 Canvas 上绘制另一个位图。
-
displayWidth 和 displayHeight 的值是多少?它们是固有的宽度和高度吗? ( myBitmap.getIntrinsicWidth() , myBitmap.getIntrinsicHeight();)
-
显示为 480x800px。我在 5 个主屏幕上分别设置了 5 个 480x800(内部尺寸)位图。
-
嘿,您最终找到解决方案了吗?
标签: java android bitmap out-of-memory wallpaper