減小bitmap佔內存大小的方案有兩種:1,options.inSampleSize 設置採樣率的值,原理是等比縮放寬高。縮放多少倍bitmap的內存大小佔用久縮放多少倍。 2.options.inPreferredConfig = Bitmap.Config.RGB_565; 設置位深,也可以說是設置RGB格式,一般有三種RGB_8888,RGB_565,RGB_4444(現在用這種好像無效果了) 設置這個屬性的話對png是無效的不能改變bitmap的大小,對jpg,webp是有效的。RGB_8888比RGB_565佔的內存大一倍。 options.inJustDecodeBounds = true;//設置這個屬性的話可以拿到圖片的寬和高。拿到這寬高可以自己設定一個值然後比較是否大於這個值,做一個採樣率的縮放。 質量壓縮是不能改變bitmap的內存佔用大小的,但是它可以改變圖片文件的大小。 尺寸壓縮纔可以改變bitmap的內存佔用大小。 package com.example.myapplication.activity; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import com.example.myapplication.R; public class BitmapActivity extends Activity { TextView textView; ImageView imageView; int imgWidth; int imgHeight; boolean off = true; @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bitmap); textView = findViewById(R.id.add); imageView = findViewById(R.id.img); final BitmapFactory.Options options = new BitmapFactory.Options(); // options.inJustDecodeBounds = true;//設置這個屬性的話可以拿到圖片的寬和高 // options.inSampleSize = 1; //設置這個值可以放大縮小圖片,可以按倍數縮放圖片的寬高 // options.inPreferredConfig = Bitmap.Config.ARGB_8888; //inPreferredConfig只對webp和jpg的圖片有效,對png的圖片無效 Bitmap bitmap = getBitmap(R.drawable.jiwebp, options); imgWidth = options.outWidth; imgHeight = options.outHeight; textView.setText("寬=" + imgWidth + "高=" + imgHeight + "大小==" + bitmap.getByteCount()); imageView.setImageBitmap(bitmap); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (off) { options.inSampleSize = 2; options.inPreferredConfig = Bitmap.Config.ARGB_8888; off = false; } else { options.inSampleSize = 4; options.inPreferredConfig = Bitmap.Config.RGB_565; off = true; } // options.inSampleSize = 4; // options.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap bitmap = getBitmap(R.drawable.jiwebp, options); imageView.setImageBitmap(bitmap); imgWidth = options.outWidth; imgHeight = options.outHeight; textView.setText("寬=" + imgWidth + "高=" + imgHeight + "大小==" + bitmap.getByteCount()); } }); } private Bitmap getBitmap(int id, BitmapFactory.Options options) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id, options); return bitmap; } }
記bitmap內存優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.