android获取图片尺寸的两种方式及bitmap的缩放操作

我就废话不多说了,大家还是直接看代码吧~

 //Uri.parse("file://"+result.getImage().getCompressPath()))
  String path=uri.getPath();
  Log.e("图片路径",path+"");
  SpannableString spannableString=new SpannableString(path);
  //方法一:通过uri把图片转化为bitmap的方法
  Bitmap bitmap= BitmapFactory.decodeFile(path);
  int height= bitmap.getHeight();
  int width= bitmap.getWidth();
  Log.e("通过bitmap获取到的图片大小","width:"+width+"height"+height);
  //方法二:使用Options类来获取
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;//这个参数设置为true才有效,
  Bitmap bmp = BitmapFactory.decodeFile(path, options);//这里的bitmap是个空
  if(bmp==null){
   Log.e("通过options获取到的bitmap为空","===");
  }
  int outHeight=options.outHeight;
  int outWidth= options.outWidth;
  Log.e("通过Options获取到的图片大小","width:"+outWidth+"height"+outHeight);

关于两种方法:

第一种: 直接把bitmap加载到内存中,通过对bitmap的测量,得出宽高,由于这个方法直接把图片引入内存,如果图片过大,将会引发OOM;

第二种:bitmap.options类为bitmap的裁剪类,通过他可以实现bitmap的裁剪;如果不设置裁剪后的宽高和裁剪比例,返回的bitmap对象将为空,但是这个对象存储了原bitmap的宽高信息。

打log输出信息如下:

缩放:

 Bitmap bitmap=null;
  BitmapFactory.Options options=new BitmapFactory.Options();
  options.inSampleSize=2;
  options.inJustDecodeBounds = false;
  if(path.equals("a1")){
   bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.a1,options);

inSampleSize表示缩放比例

补充知识:android获取Bitmap对象,获取图片宽高

android在不加载图片的前提下获得图片的宽高

public static int[] getImageWidthHeight(String path){
 BitmapFactory.Options options = new BitmapFactory.Options();

 /**
  * 最关键在此,把options.inJustDecodeBounds = true;
  * 这里再decodeFile(),返回的bitmap为空,但此时调用options.outHeight时,已经包含了图片的高了
  */
 options.inJustDecodeBounds = true;
 Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回的bitmap为null
 /**
  *options.outHeight为原始图片的高
  */
 return new int[]{options.outWidth,options.outHeight};
}

通过BitmapFactory从不同位置获取Bitmap

1.资源文件(drawable/mipmap/raw)

BitmapFactory.decodeResource(getResources(), R.mipmap.slim_lose_weight_plan_copenhagen,options);

2.资源文件(assets)

InputStream is = getActivity().getAssets().open("bitmap.png");

BitmapFactory.decodeStream(is);

3.内存卡文件

bitmap = BitmapFactory.decodeFile("/sdcard/bitmap.png");

4.网络文件

bitmap = BitmapFactory.decodeStream(is);

可根据BitmapFactory获取图片时传入option,通过上述方法获取图片的宽高

以上这篇android获取图片尺寸的两种方式及bitmap的缩放操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • AndroidStudio替换项目图标ic_launcher操作

    1.打开项目主界面,任意打开一个类文件,如MainActivity.java,不要打开布局文件的disign界面 2.点击File-->New-->Image Asset,如图: 3.选择要替换的图标 4.选好之后点击ok 5.点击Next 6.点击finish 7.另外,如果你重新运行之后图标没有变化,不用着急,现在智能手机基本上都是桌面和应用同时控制着图标的显示,两者一起改,桌面图标才会变化,而桌面图标是有缓存的,应用改了之后,桌面依然控制着显示原来的图标,清除桌面数据再试试,基本上就能看

  • 使用newInstance()来实例化fragment并传递数据操作

    好问题.答案就是这篇文章的题目所建议的,这是一种合理的设计.在这种情况下,newInstance()方法是一种"静态工厂方法",让我们在初始化和设置一个新的fragment的时候省去调用它的构造函数和额外的setter方法. 为你的Fragment提供静态工厂方法是一种好的做法,因为它封装和抽象了在客户端构造对象所需的步骤. 例如,考虑下面的代码: public class MyFragment extends Fragment { /** * 静态工厂方法需要一个int型的值来初始化

  • IDEA打包jar-解决找不到或无法加载主类 main的问题

    学习大佬们开发安全小工具,打包jar解决错误: 找不到或无法加载主类 main 1 Maven方式 遇到报错"找不到或无法加载主类 main" 解决方案 一定加入<build> <plugins>中的插件,这里需要注意的是 <mainClass>Main</mainClass>,这里填写的路径为/src/main/java下开始写的 <?xml version="1.0" encoding="UTF-8

  • android获取图片尺寸的两种方式及bitmap的缩放操作

    我就废话不多说了,大家还是直接看代码吧~ //Uri.parse("file://"+result.getImage().getCompressPath())) String path=uri.getPath(); Log.e("图片路径",path+""); SpannableString spannableString=new SpannableString(path); //方法一:通过uri把图片转化为bitmap的方法 Bitmap b

  • Android实现图片的高斯模糊(两种方式)

    在市面上很多的APP都使用了对图片作模糊化处理后作为背景的效果,来使得整个页面更具有整体感.如下就是网易云音乐的音乐播放页面: 很明显这个页面的背景是由中间的小图片模糊化后而来的.最常用的模糊化处理就是高斯模糊. 高斯模糊的几种实现方式: (1)RenderScript RenderScript是Google在Android 3.0(API 11)中引入的一个高性能图片处理框架. 使用RenderScriprt实现高斯模糊: 首先在在build.gradle的defaultConfig中添加Re

  • Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor错误 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.apple).copy(Bi

  • Android 获取 usb 权限的两种方法

    前言: 最近工作上遇到几个USB模块在android平台上适配使用的情况,所以要用到USB权限获取问题 ##USB权限获取有以下2种方式: 一.直接在AndroidManifest.xml文件中进行如下配置: <activity android:name=".DemoCustomAndroidUSBActivity" android:label="@string/app_name"> <intent-filter> <action an

  • Python实现图片裁剪的两种方式(Pillow和OpenCV)

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有一张原始图片,如下图所示: 原始图片 然后,我们利用OpenCV对其进行裁剪,代码如下所示: import cv2 img = cv2.imread("./data/cut/thor.jpg") print(img.shape) cropped = img[0:128, 0:512] #

  • Android实现旋转动画的两种方式案例详解

    目录 练习案例 效果展示 前期准备 自定义 View java代码编写 方法一 方法二 易错点总结: 练习案例 视差动画 - 雅虎新闻摘要加载 效果展示 前期准备 第一步:准备好颜色数组 res => values => colors.xml <color name="orange">#FF9600</color> <color name="aqua">#02D1AC</color> <color n

  • IOS给图片添加水印(两种方式)

    为了防止自己辛苦做的项目被别人盗走,采取图片添加水印,在此表示图片的独一无二.加水印不是在上面添加几个Label,而是我们把字画到图片上成为一个整体,下面小编给大家分享IOS给图片添加水印(两种方式). 提供一个方法,此方法只需要传递一个要加水印的图片和水印的内容就达到效果. 第一种方式: -(UIImage *)watermarkImage:(UIImage *)img withName:(NSString *)name { NSString* mark = name; int w = img

  • Java web开发中加载图片路径的两种方式

    (1)   src="/image/1_it.jpg" (2)   src="http://localhost:8080/image/1_it.jpg" 其中localhost可以换位你的电脑IP,端口号也要相应改变. 以上均在基于编译器idea以及tomcat服务器开发的web中测试可行!都是要先定位到项目的位置! 以上所述是小编给大家介绍的Java web开发加载图片路径的两种方式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

  • Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView. 布局main.xml: <?xml version="1.0&qu

  • Android Studio签名打包的两种方式(图文教程)

    签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如果不知道签名是啥意思,请自行百度哦.在eclipse中签名的方法是:选中工程,邮件选择"export-android-export android application", 1.方式1:通过Android Studio进行签名: 选中app这个module,选择菜单栏"Buil

随机推荐