如何让我的图像消耗更少的内存?

时间:2013-06-04 02:25:04

标签: android

我正在开发一款游戏,我正在使用图形,我遇到了一些力量关闭。所以我的问题是:我们怎样才能让图片在Android中消耗更少的内存?

我会解释我的游戏,它是一个带有一些小图像和背景的逻辑游戏。我在一个星系笔记中测试应用程序,1 GB内存,我认为它可能需要高分辨率,但如果我使用大图像作为背景,它会在进入暂停布局后再强制关闭。

所以我降低了图形并完成了没有强制关闭。无论如何还有一些方法可以避免这种记忆问题吗?我直接在xml上设置图像是错误的吗?


解决

我决定采用这种方法,感谢Durairaj Packirisamy的回答

这是我的代码:

        Bitmap unscaledimgswitch = BitmapFactory.decodeResource(getResources(), R.drawable.switch1on);
    ImageView switch1 = (ImageView) findViewById(R.id.switch1);


    int viewheight =  screenheight / 10;
    int imgheight = unscaledimgswitch.getHeight();
    switch1.getLayoutParams().height = viewheight;




    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    options.inSampleSize = ScaledFactor.getScaleFactor(imgheight ,viewheight); // de esta forma cargo la imagen del tamaño exacto necesario
    options.inJustDecodeBounds = false; 
    imgswitch = BitmapFactory.decodeResource(getResources(), R.drawable.switch1on, options);
    switch1.setImageBitmap(imgswitch);

在另一个班级

    static int getScaleFactor(int imgheight, int viewheight) { 
    int result;

result = imgheight / viewheight ;



    return result;
}

1 个答案:

答案 0 :(得分:1)

您需要使用正确的BitmapFactory.options.inSampleSize值,如果设置为值> 1,请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options);

另请看这里:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html