• android多媒体编程--加载大图片


    如果一个图片很大的话加载到屏幕中就可能造成内存溢出,为了解决这个问题,我们把一个很大的图片进行等比缩放至最适合屏幕的图片。

    怎么来进行缩放呢?

    图片的/屏幕宽=比例1;

    图片高/屏幕高=比例2;

    然后来看哪个比例大用哪个

    package com.example.image;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.BitmapFactory.Options;
    import android.view.Display;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
        private ImageView img;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img = (ImageView) findViewById(R.id.img);
            findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    Options options = new Options();
                    //请求图片但不申请内存
                    options.inJustDecodeBounds = true;
                    BitmapFactory.decodeFile("sdcard/dog.jpg",options);
                    //获取图片宽高
                    int imgWidth = options.outWidth;
                    int imgHeight = options.outHeight;
                    //获得屏幕宽高
                    Display dis = getWindowManager().getDefaultDisplay();
                    int w = dis.getWidth();
                    int h = dis.getHeight();
                    //算出图片和屏幕缩放的比例
                    int widthB = imgWidth/w;
                    int heightB = imgHeight/h;
                    int result = 1;
                    //取大的倍数
                    if(widthB>=heightB && widthB>1){
                        result = widthB;
                        
                    }else if(widthB<heightB && heightB>1){
                        result = heightB;
                    }
                    //设置缩放比例
                    options.inSampleSize=result;
                    //请求内存
                    options.inJustDecodeBounds = false;
                    Bitmap bitmap = BitmapFactory.decodeFile("sdcard/dog.jpg",options);
                    img.setImageBitmap(bitmap);    
                }
            });
        }
    
        
    }
  • 相关阅读:
    CF238B Boring Partition
    CF1424G Years
    CF995D Game
    CF468C Hack it!
    CF1417A Copy-paste
    CF1417B Two Arrays
    CF849B Tell Your World
    [洛谷P3389][模板]高斯消元法
    CF1225D
    P6687
  • 原文地址:https://www.cnblogs.com/84126858jmz/p/4973497.html
Copyright © 2020-2023  润新知