• 缩放加载大图片


    09-14 00:59:51.813: E/AndroidRuntime(2128): Caused by: java.lang.OutOfMemoryError
    09-14 00:59:51.813: E/dalvikvm-heap(2128): Out of memory on a 30720012-byte allocation.
    在Android下采用ARGB来表示颜色  每个像素占4byte
    图片:2400*3200
    手机:320*480 
    宽缩放: 7  
    高缩放: 6  
    需要考虑的问题 (1)动态获取图片的分辨率 
                       (2)动态获取手机分辨率 
     
    public class MainActivity extends Activity {
    
        private ImageView iv;
        private int screenWidth;
        private int screenHeight;
    
    
        @SuppressWarnings("deprecation")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //[1]找到iv 显示加载图片 
            
            iv = (ImageView) findViewById(R.id.iv);
            
            //[2]获取手机的分辨率  获取windowmanager 实例 
            WindowManager wm  = (WindowManager) getSystemService(WINDOW_SERVICE);
            screenWidth = wm.getDefaultDisplay().getWidth();
            screenHeight = wm.getDefaultDisplay().getHeight();
            
            System.out.println("手机的宽和高:"+screenWidth+"---"+screenHeight);
            
            
            
            
        }
    
        
        //点击按钮  加载dog.jpg 这张图片
        @SuppressLint("SdCardPath")
        public void click(View v) {
            //[2]把dog.jpg 转换成bitmap  
            
            //创建bitmap工厂的配置参数 
            BitmapFactory.Options options = new Options();
            
            //返回一个null 没有bitmap   不去真正解析位图 但是能返回图片的一些信息(宽和高)
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg",options);
            //[3]获取图片的宽和高  
            int imgWidth = options.outWidth;
            int imgHeight = options.outHeight;
            System.out.println("图片的宽:"+imgWidth+"-----"+imgHeight);
            
            //[4]计算缩放比 
            int scale = 1;  //我们定义的缩放比 
            int scalex =  imgWidth/screenWidth;
            int scaley = imgHeight /screenHeight;
            if (scalex >=scaley&&scalex > scale) {
                scale = scalex;
            }
            if (scaley > scalex && scaley>scale) {
                scale = scaley;
            }
            System.out.println("缩放比为:"+scale);
            
            
            //[5]按照缩放比显示图片 
            options.inSampleSize = scale;
            
            //[6]开始真正的解析位图 
            options.inJustDecodeBounds = false;
            Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg",options);
            
            //[7]把bitmap显示到控件上
            iv.setImageBitmap(bitmap);
            
            
            
            
        }
        
    
    }
  • 相关阅读:
    Python中CreateCompatibleDC和CreateBitmap造成的内存泄漏
    POJ 2420 模拟退火
    LR(1)分析表-语法树-四元式
    C语言文法
    计蒜客 18018 热爱工作的蒜蒜 最短路+dp
    HDU 5988 最小费用流
    POJ 1808 平方剩余
    POJ 2115 单变元模线性方程
    计蒜客 17414 Exponial 指数降幂公式
    计蒜客 17412 Card Hand Sorting 最长公共子序列
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6066397.html
Copyright © 2020-2023  润新知