请问有谁能帮我了解如何捕获 FrameLayout
内容并将其保存为图像到内部或外部存储器。
如何将任何视图转换为图像?
请问有谁能帮我了解如何捕获 FrameLayout
内容并将其保存为图像到内部或外部存储器。
如何将任何视图转换为图像?
尝试使用以下方法将视图(FrameLayout)转换为位图:
public Bitmap viewToBitmap(View view) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
接着,将位图保存到文件中:
try {
FileOutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/path/to/file.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
finally
块来关闭流并回收位图。 - Paul Lammertsmaview.getDrawingCache(true/false)
来使其更加高效,因为视图绘制可能已经被缓存。然后,如果 getDrawingCache()
返回 null,则按照你的方式调用 Bitmap.createBitmap()
。有关更多信息,请参阅文档:https://developer.android.com/reference/android/view/View.html#getDrawingCache(boolean) - w3bshark试试这个...
public static void saveFrameLayout(FrameLayout frameLayout, String path) {
frameLayout.setDrawingCacheEnabled(true);
frameLayout.buildDrawingCache();
Bitmap cache = frameLayout.getDrawingCache();
try {
FileOutputStream fileOutputStream = new FileOutputStream(path);
cache.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
// TODO: handle exception
} finally {
frameLayout.destroyDrawingCache();
}
}
FrameLayout
是一种布局,而image
是一张图片。它们非常不同。我怎么能把一个苹果变成一个橙子? - Raptor