我试图检索的图像,我(认为)我已经保存使用一个surfaceview在一个片段(噩梦)在Android。这里我尝试保存一个图像并列出目录中的所有图像。我完全不知道目录在哪里(storage/emululated/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'消息。我可能用文件名字符串把事情弄得更糟,但即使在回显的列表中的一个文件中硬编码,我也会得到相同的结果。基于这段代码的结果,图像是否应该存在?我怎么才能把图像变成位图呢?有更好的方法吗?我已经试过了我能找到的每一个例子,阅读了每一个主题。
这是我现在工作的一个按钮的例子,它将与surfaceview一起工作,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);
}