如何保存图片中activity的文字?
how to save the text of the activity in an image?
我需要获取视图中的文本,并保存图像格式。我需要将图像存储在设备的外部存储器中。
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
}
}
我个人使用这个:
public static Bitmap fromView(@NonNull final View view) {
final DisplayMetrics displayMetrics = ApplicationHelper.resources().getDisplayMetrics();
if (displayMetrics == null) {
LogHelper.warning("DisplayMetrics was NULL");
return null;
}
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
view.buildDrawingCache();
final Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
此方法 returns 任何 View
的 Bitmap
,就像(View
的屏幕截图)。
然后您可以存储或上传此 Bitmap
作为证据。
我使用这个解决方案
public void saveScreenshotOnDisk (final View view, final Context context, final String folder, final String title, final String description) {
final String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
final Bitmap screenshot = screenShot(view, context);
final File folderPath = new File(Environment.getExternalStorageDirectory().toString() + File.separatorChar + folder + File.separatorChar + "" + "s");
if (!folderPath.exists()) {
folderPath.mkdirs();
}
final String imagePath = folderPath.getAbsolutePath() + File.separatorChar + "Receipt" + "_" + System.currentTimeMillis() + ".png";
OutputStream fout = null;
File imageFile = new File(imagePath);
try {
fout = new FileOutputStream(imageFile);
screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fout);
MediaStore.Images.Media.insertImage(context.getContentResolver(), screenshot, title, description);
Toast.makeText(context, "Verifique a pasta " + folder + " .", Toast.LENGTH_LONG).show();
} catch (Exception e) {
BBLog.w(TAG + ".saveScreenshotOnDisk", e.getMessage());
}finally{
try {
if(fout != null){
fout.flush();
fout.close();
}
} catch (Exception e2) {}
}
}
}
public static Bitmap screenShot(final View view, final Context context) {
view.setBackgroundColor(Color.WHITE);
Bitmap capture = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(capture);
view.draw(c);
view.setBackgroundColor(Color.TRANSPARENT);
shootSound(context);
return capture;
}
我需要获取视图中的文本,并保存图像格式。我需要将图像存储在设备的外部存储器中。
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
}
}
我个人使用这个:
public static Bitmap fromView(@NonNull final View view) {
final DisplayMetrics displayMetrics = ApplicationHelper.resources().getDisplayMetrics();
if (displayMetrics == null) {
LogHelper.warning("DisplayMetrics was NULL");
return null;
}
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
view.buildDrawingCache();
final Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
此方法 returns 任何 View
的 Bitmap
,就像(View
的屏幕截图)。
然后您可以存储或上传此 Bitmap
作为证据。
我使用这个解决方案
public void saveScreenshotOnDisk (final View view, final Context context, final String folder, final String title, final String description) {
final String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
final Bitmap screenshot = screenShot(view, context);
final File folderPath = new File(Environment.getExternalStorageDirectory().toString() + File.separatorChar + folder + File.separatorChar + "" + "s");
if (!folderPath.exists()) {
folderPath.mkdirs();
}
final String imagePath = folderPath.getAbsolutePath() + File.separatorChar + "Receipt" + "_" + System.currentTimeMillis() + ".png";
OutputStream fout = null;
File imageFile = new File(imagePath);
try {
fout = new FileOutputStream(imageFile);
screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fout);
MediaStore.Images.Media.insertImage(context.getContentResolver(), screenshot, title, description);
Toast.makeText(context, "Verifique a pasta " + folder + " .", Toast.LENGTH_LONG).show();
} catch (Exception e) {
BBLog.w(TAG + ".saveScreenshotOnDisk", e.getMessage());
}finally{
try {
if(fout != null){
fout.flush();
fout.close();
}
} catch (Exception e2) {}
}
}
}
public static Bitmap screenShot(final View view, final Context context) {
view.setBackgroundColor(Color.WHITE);
Bitmap capture = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(capture);
view.draw(c);
view.setBackgroundColor(Color.TRANSPARENT);
shootSound(context);
return capture;
}