1.获取资源文件中图片的大小,最简单的最直接的方法,就是使用Drawable的getIntrinsicHeight()和getIntrinsicWidth();
2.利用Bitmap来获取其大小,本质上和第一种方式没什么区别:
- /**
- * 计算ImageView的大小(BitmapDrawable)
- *
- * @param resources
- * @param resourceId
- * @return
- */
- public static int[] computeWH(Resources resources, int resourceId) {
- int[] wh = { 0, 0 };
- if (resources == null)
- return wh;
- Bitmap mBitmap = BitmapFactory.decodeResource(resources, resourceId);
- BitmapDrawable bDrawable = new BitmapDrawable(resources, mBitmap);
- wh[0] = bDrawable.getIntrinsicWidth();
- wh[1] = bDrawable.getIntrinsicHeight();
- return wh;
- }
3.可以利用BitmapFactory.Options的outWidth和outHeight两个参数获取其大小,下面给出简单的3种方法供参考:
注意:设置inJustDecodeBounds为true后,decodeFile并不分配空间,即,BitmapFactory解码出来的Bitmap为Null,但可计算出原始图片的长度和宽度。
- /**
- * 计算ImageView的大小(decodeFileDescriptor)
- *
- * @param imageFile
- * @return
- */
- public static int[] computeWH_1(String imageFile) {
- int[] wh = { 0, 0 };
- if (imageFile == null || imageFile.length() == 0)
- return wh;
- try {
- FileDescriptor fd = new FileInputStream(imageFile).getFD();
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inSampleSize = 1;
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeFileDescriptor(fd, null, options);
- if (options.mCancel || options.outWidth == -1
- || options.outHeight == -1) {
- return wh;
- }
- wh[0] = options.outWidth;
- wh[1] = options.outHeight;
- } catch (Exception e) {
- }
- return wh;
- }
- /**
- * 计算ImageView的大小(decodeFile)
- *
- * @param imgFile
- * @return
- */
- public static int[] computeWH_2(String imgFile) {
- int[] wh = { 0, 0 };
- if (imgFile == null || imgFile.length() == 0)
- return wh;
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inSampleSize = 1;
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeFile(imgFile, options);
- if (options.mCancel || options.outWidth == -1
- || options.outHeight == -1) {
- return wh;
- }
- wh[0] = options.outWidth;
- wh[1] = options.outHeight;
- return wh;
- }
- /**
- * 计算ImageView的大小(decodeResource)
- *
- * @param resources
- * @param resourceId
- * @return
- */
- public static int[] computeWH_3(Resources resources, int resourceId) {
- int[] wh = { 0, 0 };
- if (resources == null)
- return wh;
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inSampleSize = 1;
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeResource(resources, resourceId, options);
- if (options.mCancel || options.outWidth == -1
- || options.outHeight == -1) {
- return wh;
- }
- wh[0] = options.outWidth;
- wh[1] = options.outHeight;
- return wh;
- }
转载地址:http://chjmars.iteye.com/blog/1156832