我正在尝试使用一种方法从Layouts生成位图,并将位图保存到内部存储器中的文件中。但是,getApplicationContext()未解析。
以下是方法的代码
$screen -r 4683.pts-0.xxxx
使用StackOverFlow代码的一些帮助来生成此方法。即使在 private void generateAndSaveBitmap(View layout) {
//Generate bitmap
layout.setDrawingCacheEnabled(true);
layout.buildDrawingCache();
Bitmap imageToSave = layout.getDrawingCache();
//Create a file and path
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
File fileName = new File(directory, "sharableImage.jpg");
if (fileName.exists())
fileName.delete();
//Compress and save bitmap under the mentioned fileName
FileOutputStream fos = null;
try {
fos = new FileOutputStream(fileName);
imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// return directory.getAbsolutePath();
}
上阅读相关查询后,我也无法找到问题。任何帮助都会非常感激
编辑:忘了提一下,方法getApplicationContext()
是在一个单独的类
此致
答案 0 :(得分:2)
步骤1:删除ContextWrapper cw = new ContextWrapper(getApplicationContext());
,因为您不需要它。
第2步:将cw.getDir("imageDir", Context.MODE_PRIVATE);
替换为layout.getContext().getDir("imageDir", Context.MODE_PRIVATE);
另外,请将此磁盘I / O移动到后台线程。
答案 1 :(得分:1)
尝试,
ContextWrapper cw = new ContextWrapper(getActivity());
这是一个片段。
答案 2 :(得分:0)
你试过了吗?
File dir = getApplicationContext().getDir(Environment.DIRECTORY_PICTURES, Context.MODE_PRIVATE);
现在,从图像处理到将文件写入目录,一切都应该在线程外完成。在可能的情况下将其封装在AsyncTask中,并在其中移动generateAndSaveBitmap()
方法。