将图像资源加载为RGB 565

时间:2013-06-13 18:45:35

标签: android image memory-management rgb

我正在尝试降低我的应用程序的内存使用量,我注意到它的大部分是由活动的背景引起的:在XHDPI中,720 * 1280 * 4 = 3.6Mbytes,而Android似乎没有一旦它们不再使用就立即释放它们。

有没有办法告诉Android将某些资源图片加载为RGB 565而不是RGB 8888,以便在没有Alpha通道的情况下为那些较大的图片保存一些内存?

我知道这可以通过编程方式完成,但我想知道是否也可以使用活动布局或setBackgroundResource()中使用的图像和背景来完成。

2 个答案:

答案 0 :(得分:10)

你可以这样做:

protected void onCreate(Bundle savedInstanceState)
{
    setContentView(R.layout.high_scores);
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inPreferredConfig = Config.RGB_565;
    BitmapDrawable highScoresBg = BitmapFactory.decodeResource(getResources(), R.drawable.achievements, opts);
    findViewById(R.id.high_scores_root).setBackgroundDrawable(highScoresBg);

使用ARGB_8888时,图像的像素将存储在2个字节上,而不是4个字节。 50%的记忆保存,但质量当然不高。

这个article告诉我们在Android< 2.3图像默认为RGB_565。但是,如果图像具有Alpha通道(例如PNG),则它将加载到ARGB_8888中。在Android> = 2.3上,默认情况下所有图像都加载到ARGB_8888中。

答案 1 :(得分:2)

目前无法将资源标记为RGB_565。

您可以做的最好的事情是提供一个后续数据文件,将您的图像文件映射到所需的内存格式。在加载时,您可以根据文件检查每个资源ID,以确定是否要将BitmapFactory选项设置为565或8888.

大多数下拉图像数据的应用程序都使用类似的过程。例如,一些具有小分辨率的JPG图像被假定为缩略图,并使用565路径加载到存储器中。允许全屏JPG以8888加载到内存中。

基本上,您在应用中总是需要一定程度的逻辑来相应地设置BitmapOptions。

相关问题