如何在android中获取显示图像的宽度和高度?

Posted

技术标签:

【中文标题】如何在android中获取显示图像的宽度和高度?【英文标题】:How to get width and height of displayed image in android? 【发布时间】:2015-02-09 09:30:06 【问题描述】:

这个问题可能看起来微不足道,被问了很多次,但我找不到适合我的答案。

当我按下按钮时,我有一个ImageViewGLSurfaceView 绘制在ImageView 之上。

对于我的ImageView,我传递了一个Bitmap 并将其缩小以避免OutOfMemoryError 异常。我的ImageView 与我的 UI 中的其他元素对齐,因此它会拉伸图像以填充宽度/高度(这就是我想要的)。

当我从 ImageView 更改为 GLSurfaceView 时,我的图像周围出现黑色区域​​,这些区域在我的 ImageView 中是透明的,因为 GLSurfaceView 在 UI 中打了一个洞,并且与通常绘制背景的元素的工作方式不同我的图像变成黑色,我不需要它,因为我有自定义背景。

我想出了一个解决方案,以编程方式将LayoutParams 设置为GLSurfaceView,并使用Bitmap 的宽度和高度,但最终得到的图像更小。我需要显示图像的确切宽度和高度 - 而不是 ImageView,因为它具有透明区域。

PS:我不是 OpenGL 专家,如果您有适用于 OpenGL 的解决方案,请分享。

一)

 _______________
|               |
|               |
|---------------|          <-
|   transparent |     
|---------------| <-            Entire
|               |               ImageView
|     Image     |   need
|               | only this
|---------------| <-
|   transparent |
|---------------|          <-
|               |
 ---------------

b)

 _______________
|               |
|               |
|---------------|       <-
|   black       |
|---------------|
|               |              
|    Image      |          GLSurfaceView
|               |
|---------------|
|   black       |
|---------------|       <-
|               |
 ---------------

我的ImageViewGLSurfaceView

<android.opengl.GLSurfaceView
    android:id="@+id/glsvImageHolder"
    android:layout_
    android:layout_
    android:layout_above="@+id/horScrollImage"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="50dp"
    android:visibility="invisible" />
<ImageView
    android:id="@+id/ivImageHolder"
    android:layout_
    android:layout_
    android:layout_above="@+id/horScrollImage"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="50dp"
    android:visibility="visible" />

【问题讨论】:

位图本身是否包含顶部和底部透明区域? 不,位图不包含透明区域。 【参考方案1】:
float widthPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 
                                pxToMm(ivImageHolder.getWidth(), context), 
                                getResources().getDisplayMetrics());

float heightPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 
                            pxToMm(ivImageHolder.getHeight(), context), 
                            getResources().getDisplayMetrics());

ViewGroup.LayoutParams layoutParams= glsvImageHolder.getLayoutParams();
layoutParams.width= (int) widthPx;
layoutParams.height= (int) heightPx;

glsvImageHolder.setLayoutParams(layoutParams);

像素到毫米

public static float pxToMm(final float px, final Context context)

    final DisplayMetrics dm = context.getResources().getDisplayMetrics();
    return px / TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, dm);

制作 GLSurfaceView 的宽度和高度:wrap_content。

【讨论】:

这只是将某物的宽度和高度从任意单位(可能是 px)转换为 mm...

以上是关于如何在android中获取显示图像的宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 javafx imageView 中获取显示图像的宽度/高度?

如何在 next.js 中获取图像宽度/高度?

如何在ImageView中显示图像?

我可以从android中的uri获取图像文件的宽度和高度吗?

如何在 OpenCV 中获取图像的宽度和高度? [复制]

旋转后如何获取图像的宽度和高度?