Растровое изображение экрана

Я работаю с Camera2 API. У меня есть предварительный просмотр камеры в виде текстуры. И изображение, которое размещается поверх вида текстуры. ImageView и textureView размещаются в RelativeLayout.

Получение rootView и преобразование его в растровое изображение дает мне только черный экран в представлении текстуры, как показано ниже, внутри относительного макета:

View rootView = findViewById(android.R.id.content).getRootView();
    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();

Метод getBitmap() успешно возвращает растровое изображение текстуры, но id не включает в себя imageView, который накладывается на него.

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

Уже упомянутые ссылки:

Android: хотите наложить силуэт на Предварительный просмотр камеры

Как разместить динамическое изображение над представлением текстуры?< /а>

Моя структура макета выглядит следующим образом:

<FrameLayout
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextureView
        android:id="@+id/textureView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/SelectedImage"
        android:layout_width="140dp"
        android:layout_height="140dp" />

</FrameLayout>

person Sakala Bhargava Ram    schedule 12.02.2018    source источник
comment
stackoverflow .com/questions/33240203/   -  person Sivakumar S    schedule 12.02.2018


Ответы (1)


Проблема решена, когда растровые изображения генерируются отдельно, одно для просмотра текстуры с использованием .getBitmap(), а другое для imageView.

Затем imageView накладывается путем получения параметров его местоположения на экране.

public Bitmap takeScreenshot() {
    TextureView cameraTextureView=(TextureView)findViewById(R.id.CameraTextureView);
    Bitmap bitmapTextureView=cameraTextureView.getBitmap();
    ImageView selectedImageView=(ImageView)findViewById(R.id.SelectedImageView);
    Bitmap bitmapImageView;
    BitmapDrawable ImageViewDrawable=(BitmapDrawable)selectedImageView.getDrawable();
    if(ImageView.getDrawable()!=null){
        bitmapImageView=ImageViewDrawable.getBitmap();
        Log.e(TAG, "takeScreenshot: "+bitmapImageView.getHeight()+" ,"+bitmapImageView.getWidth());
        bitmapImageView=Bitmap.createScaledBitmap(bitmapImageView,selectedImageView.getWidth(),selectedImageView.getHeight(),false);
        Bitmap overlay=Bitmap.createBitmap(bitmapTextureView.getWidth(),bitmapTextureView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(overlay);
        canvas.drawBitmap(bitmapTextureView,new Matrix(),null);
        canvas.drawBitmap(bitmapImageView,selectedImageView.getLeft(),selectedImageView.getTop(),null);
        screenshotBitmap=overlay;
        return overlay;
    }
    return bitmapTextureView;
}
person Sakala Bhargava Ram    schedule 16.02.2018