Преобразовать карту в растровое изображение

Вопросы подобного типа задавались несколько раз, но мне все еще трудно понять, где хранится изображение. Я использую принятое решение этого ТАКОГО вопроса.

у меня есть cardview что я хочу преобразовать в изображение и поделиться им (это другая проблема). Моя карта - это:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
......
android.support.v7.widget.CardView
        android:id="@+id/cv_abtme"
        android:layout_width="368sp"
        android:layout_height="273dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="101dp"
        android:background="@color/colorPrimaryLight"
        app:cardBackgroundColor="@color/about_instagram_color"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            app:srcCompat="@mipmap/ic_launcher" />
        ....

    </android.support.v7.widget.CardView>

Я пытаюсь преобразовать это как:

public class AboutMeActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about_me);
        ImageButton cvbutton= findViewById(R.id.imageButton_abtme);


        cvbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getBitmapFromView(view);
                Snackbar.make(getCurrentFocus(),"Image Captured", Snackbar.LENGTH_LONG).show();
            }
        });
    }
    public static Bitmap getBitmapFromView(View view) {
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(returnedBitmap);
        Drawable bgDrawable =view.getBackground();
        if (bgDrawable!=null)
            bgDrawable.draw(canvas);
        else
            canvas.drawColor(Color.WHITE);
        view.draw(canvas);
        return returnedBitmap;
    }
}

Но я понятия не имею, как это работает, так как я не вижу ни одного изображения, но, очевидно, без ошибок.

Итак, вопрос в следующем:

  1. По какому пути создан образ?
  2. Нужно ли мне разрешение для сохранения и доступа к JPG?

2 ответа

По какому пути создан образ?

Исходя из кода в вашем вопросе, он нигде не сохраняется. Вы не написали код для его сохранения. Вы создали Bitmap объект, и это все.

Чтобы сохранить Bitmap как файл изображения на диске, позвоните compress(), указав тип изображения и FileOutputStream туда, где вы хотите сохранить его.

Вы передаете объект просмотра кнопки. Вы должны раздуть свой макет до объекта представления, а затем передать это своей функции. Это может вам помочь. Создание растрового изображения из макета / вида до / без рисования

Вот мой код работает нормально. Я надеюсь, что этот код может быть полезным

Вот xml поле для cardView

<android.support.v7.widget.CardView 
     xmlns:card_view="http://schemas.android.com/apk/res-auto"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/card_view"
     android:layout_gravity="center"
     android:layout_width="250dp"
     android:layout_height="250dp"
     card_view:cardCornerRadius="4dp">

    <ImageView
        android:src="@drawable/img_"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.v7.widget.CardView>

Здесь код для загрузки карты в виде jpeg файл

найти cardview CardView cardView = (CardView) findViewById(R.id.card_view); loadView(cardView);

Загрузить вид

 public void loadView(CardView cardView){

    try {
        cardView.setDrawingCacheEnabled(true);
        Bitmap bitmap =  loadBitmapFromView(cardView);
        cardView.setDrawingCacheEnabled(false);

        String mPath =
                Environment.getExternalStorageDirectory().toString() + "/sid.jpg";

        File imageFile = new File(mPath);
        FileOutputStream outputStream = new
                FileOutputStream(imageFile);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        outputStream.flush();
        outputStream.close();

    } catch (Throwable e) {
        e.printStackTrace();
    }
}

получить растровое изображение из вида

 public Bitmap loadBitmapFromView(View v) {
    DisplayMetrics dm = getResources().getDisplayMetrics();
    v.measure(View.MeasureSpec.makeMeasureSpec(dm.widthPixels, View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(dm.heightPixels, View.MeasureSpec.EXACTLY));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    Bitmap returnedBitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
            v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(returnedBitmap);
    v.draw(c);

    return returnedBitmap;
}

jpeg-файл cardview сохраните в папке ExternalStorage с именем файла sid.jpg,

MyCompleted Activity учебный класс

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    CardView cardView = (CardView) findViewById(R.id.card_view);
    loadView(cardView);
}
public void loadView(CardView cardView){

    try {
        cardView.setDrawingCacheEnabled(true);
        Bitmap bitmap =  loadBitmapFromView(cardView);
        cardView.setDrawingCacheEnabled(false);

        String mPath =
                Environment.getExternalStorageDirectory().toString() + "/sid.jpg";

        File imageFile = new File(mPath);
        FileOutputStream outputStream = new
                FileOutputStream(imageFile);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        outputStream.flush();
        outputStream.close();

    } catch (Throwable e) {
        e.printStackTrace();
    }
}

public Bitmap loadBitmapFromView(View v) {
    DisplayMetrics dm = getResources().getDisplayMetrics();
    v.measure(View.MeasureSpec.makeMeasureSpec(dm.widthPixels, View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(dm.heightPixels, View.MeasureSpec.EXACTLY));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    Bitmap returnedBitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
            v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(returnedBitmap);
    v.draw(c);

    return returnedBitmap;
}

}

Добавить представление на manifest файл для сохранения файла JPEG

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Другие вопросы по тегам