Ссылка на файл на SD-карте Android - PullRequest
0 голосов
/ 09 марта 2012

Я в настоящее время пытаюсь выполнить ту же операцию (OCR) для изображений в Android, один вариант - использовать камеру, а другой - загрузить изображение с SD-карты.Код работает, когда взят с камеры, где код

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

, где _path равен последнему изображению, сделанному с помощью приложения (_path = DATA_PATH + "ocr.jpg";).Однако, когда я пытаюсь использовать изображение, выбранное из галереи, где _path будет равно,

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

Программа блокируется с ошибкой

Ошибка удаления результата ResultInfo {who = null, запрос = 2, результат = -1, данные = намерение {dat = content: // media / external / images / media / 26 typ = image / jpeg (имеет дополнительные функции)}} для действия {com.project.projectActivity}:java.lang.NullPointerException

Если у кого-нибудь есть представление о том, что происходит, я бы хотел услышать от вас !!

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Вы можете получить путь к изображению как ..

_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);

Примечание : если выобрезка изображения, тогда этот метод не работает, в этом случае Gallery будет создавать обрезанное изображение в том же каталоге изображения, которое вы обрезаете.

1 голос
/ 09 марта 2012

Галерея возвращает вам Uri для доступа к изображению.

Вам необходимо использовать метод decodeStream из BitmapFactory, и для этого вам нужно открыть InputStream в указанном Uri:

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