Преобразовать карту в растровое изображение
Вопросы подобного типа задавались несколько раз, но мне все еще трудно понять, где хранится изображение. Я использую принятое решение этого ТАКОГО вопроса.
у меня есть 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;
}
}
Но я понятия не имею, как это работает, так как я не вижу ни одного изображения, но, очевидно, без ошибок.
Итак, вопрос в следующем:
- По какому пути создан образ?
- Нужно ли мне разрешение для сохранения и доступа к 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"/>