【问题标题】:Getting image dimensions in pixels in ImageView在 ImageView 中获取以像素为单位的图像尺寸
【发布时间】:2016-07-15 07:57:06
【问题描述】:

当我尝试在 ImageView 中获取以像素为单位的图像尺寸时,我发现它的宽度是原始 jpg 文件宽度的 3 倍。

我放了一个尺寸为 800 x 600 的 jpg 文件,但下面的代码显示 2400 作为其宽度。

Bitmap bitmap = ((BitmapDrawable)imgv.getDrawable()).getBitmap();
float fwidth = bitmap.getWidth();
Log.d("width0", Float.toString(fwidth));

我再次检查了 jpg 文件大小,但它没有改变(800 x 600), 我也搜索了一个解决方案,但上面的代码显示了其他用户体验的正确位图尺寸。

我做错了什么? 谁能给我一些建议?

感谢您的帮助。

【问题讨论】:

  • What have I done incorrectly? 什么都没有。您可能正在拉伸 ImageView 以适应其容器的宽度。

标签: android bitmap imageview dimensions


【解决方案1】:

这是在网站上找到的解决方案。

我在解码资源时需要更改 Option 值,而不是缩放原始图像。我必须为 decodeResource 函数使用三个参数,而不是两个。

当然,第三个参数是选项,指定不缩放的原始位图。所以现在调用bitmap的getWidth()函数可以得到800。

                Resources res = getResources();
                int id = R.drawable.map10;
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inScaled = false;
//                options.inSampleSize = 3;
                Bitmap bb = BitmapFactory.decodeResource(res, id, options);

                float fwidth = bb.getWidth();

【讨论】:

  • options.inJustDecodeBounds = true;无需将整个位图读入内存即可为您提供宽度。
【解决方案2】:

确保您的 ImageView 设置为: height : wrap_content width : wrap_content scaleType

【讨论】:

  • 我按照你的指示,wrap_content 并且没有缩放类型,谢谢,但它仍然是一样的。此外,我正在使用 setImageMatrix、getImageMatrix 和 matrix.postScale 来通过手指缩放图像。我需要删除这些代码吗?恐怕那些正在改变 ImageView 的比例类型。 (就像我使用 setScaleType())
  • 是的,我想如果你删除然后,你会得到正确的图像大小
  • 那么,如何在 ImageView 中放大/缩小图像??
  • 我发现我的图片在文件夹/res/drawable中,会不会有问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多