• Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息


    1. 加载大图片到内存,从gallery获取图片

    android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常,

    需要将图片等比例缩小到适合手机屏幕分辨率, 再加载。

    从gallery 获取图片, 即要获取另一个activity的返回值。

    示例代码:

    public class MainActivity extends Activity {
        private ImageView iv;
        private WindowManager wm;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            wm = getWindowManager();
            iv = (ImageView) findViewById(R.id.iv);
        }
    
        // 从系统的图库里面 获取一张照片
        public void click(View view) {
            Intent intent = new Intent();
            intent.setAction("android.intent.action.PICK");
            intent.addCategory("android.intent.category.DEFAULT");
            intent.setType("image/*");
            startActivityForResult(intent, 0);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (data != null) {
                // 获取到系统图库返回回来图片的uri
                Uri uri = data.getData();
                System.out.println(uri.toString());
                
                try {
                    InputStream is = getContentResolver().openInputStream(uri);
                    // 1.计算出来屏幕的宽高.
                    int windowWidth = wm.getDefaultDisplay().getWidth();
                    int windowHeight = wm.getDefaultDisplay().getHeight();
                    //2. 计算图片的宽高.
                    // 2.计算出来图片的宽高.
                    BitmapFactory.Options opts = new Options();
                    // 设置 不去真正的解析位图 不把他加载到内存 只是获取这个图片的宽高信息
                    opts.inJustDecodeBounds = true;
                    BitmapFactory.decodeStream(is, null, opts);
                    int bitmapHeight = opts.outHeight;
                    int bitmapWidth = opts.outWidth;
    
                    if (bitmapHeight > windowHeight || bitmapWidth > windowWidth) {
                        int scaleX = bitmapWidth/windowWidth;
                        int scaleY = bitmapHeight/windowHeight;
                        if(scaleX>scaleY){//按照水平方向的比例缩放
                            opts.inSampleSize = scaleX;
                        }else{//按照竖直方向的比例缩放
                            opts.inSampleSize = scaleY;
                        }
                        
                    }else{//如果图片比手机屏幕小 不去缩放了.
                        opts.inSampleSize = 1;
                    }
                    //让位图工厂真正的去解析图片
                    opts.inJustDecodeBounds = false;
                    //注意: 流的操作
                    is = getContentResolver().openInputStream(uri);
                    Bitmap bitmap = BitmapFactory.decodeStream(is, null, opts);
                    iv.setImageBitmap(bitmap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    
    }

    2. 获取图片exif信息

    示例代码:图片的所有描述信息都放在头部分,不仅可以读 还可以写入

    public void click(View view) {
            try {
                ExifInterface exifInfo = new ExifInterface(
                        "/sdcard/DCIM/Camera/IMG_20121103_202628.jpg");
                String width = exifInfo.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
                String length = exifInfo
                        .getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
                System.out.println(width);
                System.out.println(length);
    
                // 更改图片的exif 信息.
                // exifInfo.setAttribute(tag, value);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
  • 相关阅读:
    多个相同结构的表的字段的修改、添加
    SQL SERVER 查询去重 PARTITION BY
    message from server: "Host 'xxx' is not allowed to connect to th
    jdk 1.8 连接数据库
    恢复SQLServer数据库后,如何同步登陆名和用户名
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
    jquery.tablesorter 使用
    MD5加密
    C# 判断是否是节假日
    word ladder
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3644470.html
Copyright © 2020-2023  润新知