在SD卡,Android上引用文件

时间:2012-03-09 16:47:54

标签: android file-io path android-sdcard

我目前正在尝试对android中的图像执行相同的操作(OCR),一种选择是使用相机,另一种是从SD-CARD加载图像。从代码为

的摄像机拍摄时,代码可以正常工作
Bitmap bitmap = BitmapFactory.decodeFile(_path,options);

其中_path等于使用应用程序(_path = DATA_PATH + "ocr.jpg";)拍摄的最后一张图像。但是,当我尝试使用从_path等于的画廊中选择的图像时,

imageCaptureUri = data.getData();
_path = imageCaptureUri.getPath();

程序锁定错误

  

失败删除结果ResultInfo {who = null,request = 2,result = -1,data = intent {dat = content:// media / external / images / media / 26 typ = image / jpeg(has extras)} } to activity {com.project.projectActivity}:java.lang.NullPointerException

如果有人知道最新情况,我想听听你的意见!!

2 个答案:

答案 0 :(得分:2)

您可以将图片的路径设为..

_path = getPath(imageCaptureUri);


public String getPath(Uri uri) {
String[] projection = { MediaColumns.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
column_index = cursor
    .getColumnIndexOrThrow(MediaColumns.DATA);
cursor.moveToFirst();
imagePath = cursor.getString(column_index);

return cursor.getString(column_index);
}

然后

Bitmap bitmap = BitmapFactory.decodeFile(_path,options);

注意 :如果您正在裁剪图像,则此方法在此情况下不起作用图库将在您正在裁剪的图像的同一目录上生成裁剪图像。

答案 1 :(得分:1)

图库会返回一个Uri来访问图像。

您需要使用BitmapFactory中的decodeStream方法,为此您需要在给定的Uri上打开一个InputStream:

InputStream is = getContentResolver().openInputStream(imageCaptureUri);
Bitmap bitmap = BitmapFactory.decodeStream(is, options);