Нежелательный контур растрового изображения textview

Я пытаюсь получить растровое изображение из TextView следующим образом:

private Bitmap getBitmapFromView(View view) {
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(returnedBitmap);
        view.draw(canvas);
        return returnedBitmap;
}

Но returnBitmap содержит растровое изображение TextView с нежелательным контуром, см. картинку из Android Studio Debugger. Также я попытался использовать ту же функцию, но применил returnBitmap к ImageView, и у нее нет такого контура. Я не понимаю, как это можно исправить.

УПД. Мой макет TextView:

<TextView
      android:id = "@+id/bitmaptext"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content"
      android:layout_margin = "4dp"
      android:background = "@android:color/transparent"
      android:textColor = "@color/white"
      android:textSize = "18sp"
      tools:text = "test"
      tools:textColor = "@color/white" />

УПД2. Вот пример проекта: https://github.com/khoben/test-android, сам битмап имеет контур, а в ImageView его нет. Мне нужно изображение без этого контура.

УПД3. Хочу рисовать битмапы из texview на видео, но обводка портит все планы (рис.).

UPD4. Я должен сказать, что проблема возникла, когда изображение из getBitmapFromView() нарисовано на видео через OpenGL, и причиной был неправильный режим наложения. Ссылка на подробный ответ.

1
0
96
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Передайте свой TextView в "getBitmapFromView".

  public static Bitmap getBitmapFromView(View view) {
        view.setDrawingCacheEnabled(true);
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        return returnedBitmap;
    }

Точно такой же результат

khoben 18.12.2020 16:34

Добавьте свое текстовое представление в макет, создайте этот макет, а затем передайте этот макет этой функции.

ahmad bajwa 18.12.2020 16:35

попробуйте это: <RelativeLayout android:id = "@+id/canvasView" android:layout_width = "200dp" android:layout_height = "150dp" android:background = "@color/black"> <TextView android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:gravity = "center" android:text = "TEXT" android:textColor = "@color/white" android:textSize = "18sp" /> </RelativeLayout >

ahmad bajwa 18.12.2020 16:40

Я добавил разметку xml на вопрос. Вот пример проекта github.com/khoben/test-android , github.com/khoben/test-android/blob/master/app/src/main/java‌​/… если здесь установить точку останова, то можно увидеть растровое изображение непосредственно в отладчике

khoben 18.12.2020 16:50
Ответ принят как подходящий

На самом деле, черная рамка изображения в отладчике Android возникла из-за того, что полупрозрачные пиксели вокруг букв и параметр смешивания по умолчанию дают в результате черный цвет (glClearColor был установлен на черный цвет). Также OpenGL делает то же самое.

Вот несколько советов по OpenGL:

  1. Отрегулируйте параметры смешивания (в моем случае работает):

    GLES20.glEnable(GL_BLEND);
    GLES20.glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
    
  2. Убедитесь, что оверлей рисовал на вашем фоне, например. не на очищенном фоне FBO.

Другие вопросы по теме