Как получить ширину и высоту изображения в Android?



Этот вопрос может показаться тривиальным и задавался много раз, но я не мог найти ответа, который будет работать на меня.



У меня есть ImageView и GLSurfaceView, которые рисуются поверх ImageView, Когда я нажимаю кнопку.



Для моего ImageView я передаю Bitmap и уменьшаю его, чтобы избежать исключения OutOfMemoryError. Мой ImageView выровнен по другим элементам в моем пользовательском интерфейсе, поэтому он растягивает изображение, чтобы заполнить ширину/высоту (это то, что я хочу).



Когда я меняю ImageView на GLSurfaceView, я получаю черные области вокруг моего изображения, которое раньше было прозрачным в моем ImageView, потому что GLSurfaceView делает дыру в пользовательском интерфейсе и работает иначе, чем обычные элементы, он рисует фон моего изображения черным, и мне это не нужно, потому что у меня есть пользовательский фон.



Я пришел с решением установить LayoutParams для GLSurfaceView программно и использую Bitmap ширину и высоту, но в итоге получаю меньшее изображение. Мне нужна точная ширина и высота отображаемого изображения, а не ImageView, потому что оно прозрачное регионы.

PS: Я не эксперт OpenGL, и если у вас есть решение, которое работает для OpenGL, пожалуйста, поделитесь им.

A)



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


B)



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


Мои ImageView и GLSurfaceView:



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

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.

Comments

    Ничего не найдено.