zoukankan      html  css  js  c++  java
  • android95 缩放加载大图片

    MainActivity:

    package com.itheima.loadimage;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.BitmapFactory.Options;
    import android.graphics.Point;
    import android.view.Display;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        /*#加载大图片
        * 计算机把图片所有像素信息全部解析出来,保存至内存,会内存溢出,因此要缩放。
        * Android保存图片像素信息,是用ARGB保存
        * 手机屏幕320*480,总像素:153600
        * 图片宽高2400*3200,总像素7680000
        图片的总像素大于屏幕的总像素,因此要对图片进行缩放,否则内存会溢出。
        * 2400 / 320 = 7,宽缩放比例
        * 3200 / 480 = 6,高的缩放比例
        图片的宽和高的缩放比例要一样,选择大的作为缩放比例。*/
    
        public void click(View v){
            //解析图片时需要使用到的参数都封装在这个对象里了
            Options opt = new Options();
            //不返回图片不加载图片到内存只获取图片宽高,避免了内存溢出。
            opt.inJustDecodeBounds = true;
            BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//该方法返回null
            //拿到图片宽高
            int imageWidth = opt.outWidth;
            int imageHeight = opt.outHeight;
            
            Display dp = getWindowManager().getDefaultDisplay();
            //拿到屏幕宽高
            int screenWidth = dp.getWidth();
            int screenHeight = dp.getHeight();
            
            //计算缩放比例
            int scale = 1;
            int scaleWidth = imageWidth / screenWidth;//图片的宽除以屏幕的宽
            int scaleHeight = imageHeight / screenHeight;//图片的高除以屏幕的高
            if(scaleWidth >= scaleHeight && scaleWidth >= 1){
                scale = scaleWidth;//缩放比例哪个大用哪个
            }
            else if(scaleWidth < scaleHeight && scaleHeight >= 1){
                scale = scaleHeight;
            }
            
            //设置缩放比例
            opt.inSampleSize = scale;
            opt.inJustDecodeBounds = false;//设置false就会去加载图片到内存而不是仅仅加载图片的信息,
            Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//bm就是缩放之后的图片
            
            ImageView iv = (ImageView) findViewById(R.id.iv);
            iv.setImageBitmap(bm);
        }
        
    }
    #多媒体概念
    * 文字、图片、音频、视频
    #计算机图片大小的计算
    > 图片大小 = 图片的总像素 * 每个像素占用的大小
    
    * 单色图:每个像素表示一种颜色,则用1位就可以表示0-1,则每个像素占用1/8个字节,图片大小等于图片的像素数乘以每个像素的大小。
    * 16色图:每个像素有16种颜色,则用4位0000-1111就可以表示了,即占用4位,一个字节有8位,则每个像素占用1/2个字节,图片大小等于图片的像素数乘以每个像素的大小。
    * 256色图:每个像素有256种颜色,则用8位就可以表示了00000000-11111111,每个像素占用1个字节,图片大小等于图片的像素数乘以每个像素的大小。
    * 24位图:每个像素占用24位则3个字节,图片大小等于图片的像素数乘以每个像素的大小。

     

  • 相关阅读:
    [LeetCode] 75. Sort Colors 颜色排序
    [LeetCode] 76. Minimum Window Substring 最小窗口子串
    OpenCV 2.4.10 Linux Qt Conifguration
    OpenCV2.4.10 Mac Qt Configuration
    [LeetCode] Combinations 组合项
    [LeetCode] 79. Word Search 词语搜索
    OpenCV count the number of connected camera 检测连接的摄像头的数量
    OpenCV 2.4.11 VS2010 Configuration
    Qt 程序和窗口添加图标
    [LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项之二
  • 原文地址:https://www.cnblogs.com/yaowen/p/4963265.html
Copyright © 2011-2022 走看看