我正在尝试使用Android中的片段(噩梦)中的表面视图来检索我(我认为)已保存的图像。在这里,我尝试保存图像并列出目录中的所有图像。我绝对不知道目录在哪里(storate / emulated / 0等)。我无法在任何地方找到图像,除了像这样列出它们。这告诉我他们可能存在?
jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// Create an image file name
File image = null;
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
try {
image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
} catch (IOException e) {
e.printStackTrace();
}
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
Log.d("Files", "Path: " + path);
File f = new File(path);
File file[] = f.listFiles();
Log.d("Files", "Size: "+ file.length);
String filename = "";
for (int i=0; i < file.length; i++)
{
Log.d("Files", "FileName "+i+" :" + file[i].getName());
filename = file[i].getName();
}
Bitmap myBitmap = BitmapFactory.decodeFile(file[0].getAbsolutePath()+"/"+filename);
ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
taken_pic.setImageBitmap(myBitmap);
}
};
这只是给我一个图像名称列表和'SkImageDecoder :: Factory返回null'消息。我可能用文件名字符串使事情变得更糟,但即使在列表中的其中一个文件中硬编码,我也会得到相同的结果。图像是否应该基于此代码的结果存在?我怎样才能将图像再次作为位图获取?有一个更好的方法吗。我已经尝试了每个可以找到并阅读每个主题的例子。
答案 0 :(得分:0)
这是我现在正在使用的一个按钮的示例,该按钮将用于显示相机以正确保存图像(当前为下载文件夹)的Surfaceview,检索它并将其输出到imageview(当前为“taken_pic”)。
不确定我错在哪里。我想只是在几个小地方。调试这个问题很困难。我的手机没有扎根,所以我认为我对Android Studios Device Monitor的选择有限。通常,您不会看到通过PC资源管理器浏览时保存的图像。移除USB,重新启动手机,文件应显示在应有的位置。
我希望这对某人有所帮助。
camera_picture.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
captureImage();
}
});
private void captureImage() {
cam.takePicture(shutterCallback, rawCallback, jpegCallback);
}
rawCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d("Log", "onPictureTaken - raw");
}
};
/** Handles data for jpeg picture */
shutterCallback = new Camera.ShutterCallback() {
public void onShutter() {
Log.i("Log", "onShutter'd");
}
};
jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
File fileb = new File(android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "imagename2.jpg");
outStream = new FileOutputStream(fileb);
outStream.write(data);
outStream.close();
Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d("Log", "onPictureTaken - jpeg");
String photoPath = android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/imagename.jpg";
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
taken_pic.setImageBitmap(bitmap);
}