После множества обходных путей получили решение.
Создайте фигуру и поместите ее в папку для рисования
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item>
<shape
android:innerRadiusRatio="2"
android:shape="ring"
android:thicknessRatio="1"
android:useLevel="false" >
<solid android:color="#80000000" />
<size
android:height="148dip"
android:width="148dip" />
</shape>
</item>
</layer-list>
, затем установите созданную выше форму в качестве фона для маскированного слоя в вашем XML-файле, как показано ниже
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center"
android:gravity="center"
android:background="@color/background_color"
android:layout_height="match_parent">
<RelativeLayout
android:orientation="vertical"
android:background="@drawable/ring_shape"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="2dp"
android:id="@+id/view2"
android:layout_centerHorizontal="true"
android:innerRadius="@dimen/pad2dp">
<LinearLayout
android:weightSum="1"
android:layout_marginBottom="20dp"
android:id="@+id/bottomLayout"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:foreground="@drawable/white_ripple"
android:clickable="true"
android:layout_weight="0.30"
android:layout_gravity="center"
android:id="@+id/flashCamera"
android:layout_width="0dp"
android:layout_height="@dimen/pad30dp"
android:layout_alignParentBottom="true"
android:src="@drawable/flash"
android:text="Capture Image"
android:visibility="invisible" />
<ImageView
android:layout_gravity="center"
android:foreground="@drawable/white_ripple"
android:clickable="true"
android:layout_weight="0.40"
android:id="@+id/iv_camera_button"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:src="@drawable/shutter"
android:text="Capture Image"
android:visibility="visible" />
<ImageView
android:foreground="@drawable/white_ripple"
android:layout_gravity="center"
android:clickable="true"
android:layout_weight="0.30"
android:id="@+id/switchCamera"
android:layout_width="0dp"
android:layout_height="@dimen/pad30dp"
android:layout_alignParentBottom="true"
android:src="@drawable/rotate"
android:text="Capture Image"
android:visibility="visible" />
</LinearLayout>
</RelativeLayout>
<TextureView
android:foregroundGravity="center"
android:id="@+id/texture_camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</RelativeLayout>
[115 ]и это все...! получить растровое изображение с поверхности текстуры и затем обрезать его на основе разрешения экрана и предварительного просмотра ..!
Happy Coding ..! :)
Есть веские причины для создания ваших собственных MIP-карт. Однако качество понижающей дискретизации не входит в их число.
Программисты игр и графики экспериментировали со всеми видами алгоритмов понижающей дискретизации в прошлом. В итоге оказалось, что очень простой метод «в среднем четыре пикселя» дает лучшие результаты. Кроме того, более продвинутые методы в теории являются более правильными с математической точки зрения, они, как правило, снижают резкость MIP-карт. Это дает плоский вид (попробуйте!).
По какой-то (мне непонятной) причине метод простого среднего, кажется, имеет лучший компромисс между сглаживанием и сохранением резкости MIP-карт.
Однако вы можете захотеть рассчитайте свои MIP-карты с гамма-коррекцией. OpenGL не делает этого самостоятельно. Это может иметь реальное визуальное значение, особенно для более темных текстур.
Сделать это просто. Вместо усреднения четырех значений вместе, например:
float average (float a, float b, float c, float d)
{
return (a+b+c+d)/4
}
Сделайте следующее:
float GammaCorrectedAverage (float a, float b, float c, float d)
{
// assume a gamma of 2.0 In this case we can just square
// the components.
return sqrt ((a*a+b*b+c*c+d*d)/4)
}
Этот код предполагает, что ваши цветовые компоненты нормализованы в диапазоне от 0 до 1.
Что побуждает вас попробовать? Плохо ли генерируются MIP-карты? (то есть вы смотрели?) Имейте в виду, что ваши результаты все равно будут (три) линейно интерполированы, так что между этим движением часто есть резко убывающая отдача от улучшенной передискретизации.